脚本宝典收集整理的这篇文章主要介绍了JAVA多线程04-基础篇-优先级,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
一、线程优先级
线程优先级的范围是1~10,默认优先级是5,线程优先级的主要作用是让调度器优先调度高优先级线程,但这不意味着低优先级线程得不到执行,通常情况不需要修改线程优先级,Thread类中有3个优先级的常量:
二、源码分析
public final void setPriority(int newPriority) { ThreadGroup g;//线程所属的线程组 checkAccess(); //设置的级别不能大于10且不能小于1 if (newPriority > MAX_PRIORITY || newPriority < MIN_PRIORITY) { throw new IllegalargumentException(); } if((g = getThreadGroup()) != null) { //设置的级别不能大于所属线程组的最大级别 if (newPriority > g.getMaxPriority()) { newPriority = g.getMaxPriority(); } setPriority0(priority = newPriority);//本地方法 } }
三、线程优先级示例
public class ThreadPrioritiesDemo extends Thread { private int priority; public ThreadPrioritiesDemo(String name, int priority) { super(name); this.priority = priority; } public static void main(String[] args) { Thread t1 = new ThreadPrioritiesDemo("thread1", 1); Thread t2 = new ThreadPrioritiesDemo("thread2", 10); t1.start(); t2.start(); } @H_51_126@@Override public void run() { Thread.currentThread().setPriority(priority); for (int i = 0; i < 1000; i++) { System.out.println(this + ":" + i); if (i % 2 == 0) Thread.yield(); } } }
输出结果(截取部分):
Thread[thread1,1,main]:670 Thread[thread2,10,main]:293 Thread[thread2,10,main]:294 Thread[thread1,1,main]:671 Thread[thread1,1,main]:672 Thread[thread2,10,main]:295 Thread[thread2,10,main]:296 Thread[thread1,1,main]:673 Thread[thread1,1,main]:674 Thread[thread2,10,main]:297 Thread[thread2,10,main]:298 Thread[thread1,1,main]:675 Thread[thread1,1,main]:676 Thread[thread2,10,main]:299
3.1、结果说明
新开启2个线程,线程1优先级为1,线程2优先级为10,两个线程交替执行,高优先级线程(t2)并不是一直优先于t1执行
四、总结
高优先级线程并不是一直优于低优先级线程执行
欢迎加入学习交流群569772982,大家一起学习交流。
以上是脚本宝典为你收集整理的JAVA多线程04-基础篇-优先级全部内容,希望文章能够帮你解决JAVA多线程04-基础篇-优先级所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。