如何理解线程的优先级?

  • Post author:
  • Post category:其他




1.特点?

1.线程的优先级为1-10,一般使用Thread的类常量,不会手动赋值

public static final int MIN_PRIORITY = 1;—–最低优先级

public static final int NORM_PRIORITY = 5;—–普通优先级

public static final int MAX_PRIORITY = 10;——最高优先级

2.在线程的优先级没有特殊指定时,默认都为普通优先级【NORM_PRIORITY = 5】;

3.thread.setPriority()用来设定线程的优先级;

4.线程优先级具有继承性。a线程启动b线程,b线程的优先级和a线程的优先级是一样的;

5.线程具有规则性:

高优先级的线程总是大部分先执行完,并不是高优先级的完全先执行完。线程的优先级和执行顺序无关。出现这样的结果证明mythread2的优先级是最高的,说明线程的优先级具有一定的规则性,cpu尽量将执行资源让给优先级比较高的线程。



2.应用场景?

设置线程优先级时,针对频繁阻塞(休眠或者 I/O 操作)的线程需要设置较 高优先级,而偏重计算(需要较多CPU 时间或者偏运算)的线程则设置较低的 优先级,确保处理器不会被独占。在不同的JVM 以及操作系统上,线程规划会 存在差异,有些操作系统甚至会忽略对线程优先级的设定。



3.注意点?

1.在开启线程前,设置优先级;

2.优先级高的线程执行概率大于优先级低的,但真正控制线程执行顺序还是由调度程序决定;

3.与在线程池中等待运行机会的线程相比,当前正在运行的线程可能总是拥有更高的优先级。



版权声明:本文为sjh10000原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。