小编给大家分享一下Java线程优先级是什么,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!
<强> Java线程优先级强>
线程类中,使用如下属性来代表优先级。
私人int优先;
我们可以通过setPriority (int newPriority)来设置新的优先级,通过getPriority()来获取线程的优先级。
有些资料通过下面的例子就得出了一个结论:Java线程默认优先级是5 .
公共静态void main (String [] args) { 线程的线程=新线程(); System.out.println (thread.getPriority ()); }//打印结果:5
其实这是大错特错的,只是看到了表面,看看下面的例子,我们把当前线程的优先级改为4,发现子线程线程的优先级也是4 .
公共静态void main (String [] args) { Thread.currentThread () .setPriority (4); 线程的线程=新线程(); System.out.println (thread.getPriority ()); }//打印结果:4
这啪啪啪打脸了,如果是线程默认优先级是5,我们新创建的螺纹线程,没设置优先级,理应是5,但实际是4。我们看看线程初始化优先级的源代码。
线程父母=currentThread (); 这一点。优先级=parent.getPriority ();
原来,线程默认的优先级是继承父线程的优先级,上面例子我们把父线程的优先级设置为4,所以导致子线程的优先级也变成4 .
严谨一点说,子线程默认优先级和父线程一样,Java主线程默认的优先级是5 .
Java中定义了3种优先级,分别是最低优先级(1),正常优先级(5),最高优先级(10)代码如下所示. Java优先级范围是[1,10],设置其他数字的优先级都会抛出IllegalArgumentException异常。
/* * *最低优先级线程。 */最后公共静态int MIN_PRIORITY=1;/* * *分配给线程的默认优先级。 */最后公共静态int NORM_PRIORITY=5;/* * *一个线程的最大优先级。 */最后公共静态int MAX_PRIORITY=10;
接下来说说线程优先级的作用,先看下面代码,代码逻辑是创建了3000个线程,分别是:1000个优先级为1的线程,1000个优先级为5的线程,1000个优先级为10的线程。用minTimes来记录1000个MIN_PRIORITY线程运行时时间戳之和,用normTimes来记录1000个NORM_PRIORITY线程运行时时间戳之和,用maxTimes来记录1000个MAX_PRIORITY线程运行时时间戳之和。通过统计每个优先级的运行的时间戳之和,值越小代表的就是越优先执行。我们运行看看。
公共类TestPriority { 静态AtomicLong minTimes=new AtomicLong (0); 静态AtomicLong normTimes=new AtomicLong (0); 静态AtomicLong maxTimes=new AtomicLong (0); 公共静态void main (String [] args) { List,minThreadList=new ArrayList<的在(); List ,normThreadList=new ArrayList<的在(); List ,maxThreadList=new ArrayList<的在(); int数=1000; for (int i=0;我& lt;计数;我+ +){ MyThread MyThread=new MyThread (“min - - - - -“+ i); myThread.setPriority (Thread.MIN_PRIORITY); minThreadList.add (myThread); } for (int i=0;我& lt;计数;我+ +){ MyThread MyThread=new MyThread(“规范——产生绯闻;+ i); myThread.setPriority (Thread.NORM_PRIORITY); normThreadList.add (myThread); } for (int i=0;我& lt;计数;我+ +){ MyThread MyThread=new MyThread (max - - - - -“;+ i); myThread.setPriority (Thread.MAX_PRIORITY); maxThreadList.add (myThread); } for (int i=0;我& lt;计数;我+ +){ maxThreadList.get (i) .start (); normThreadList.get (i) .start (); minThreadList.get (i) .start (); } 尝试{ thread . sleep (3000); }捕捉(InterruptedException e) { e.printStackTrace (); } System.out.println (“maxPriority统计:“;+ maxTimes.get ()); System.out.println (“normPriority统计:“;+ normTimes.get ()); System.out.println (“minPriority统计:“;+ minTimes.get ()); System.out.println(“普通优先级与最高优先级相差时间:“+ (normTimes.get ()——maxTimes.get ()) +“ms"); System.out.println(“最低优先级与普通优先级相差时间:“+ (minTimes.get ()——normTimes.get ()) +“ms"); } 静态类MyThread延伸线{ 公共MyThread(字符串名称){ 超级(名称); } @Override 公共空间run () { System.out.println (this.getName () +“;优先级:“;+ this.getPriority ()); 开关(this.getPriority ()) { 情况下线程。MAX_PRIORITY: maxTimes.getAndAdd (System.currentTimeMillis ()); 打破; 情况下线程。NORM_PRIORITY: normTimes.getAndAdd (System.currentTimeMillis ()); 打破; 情况下线程。MIN_PRIORITY: minTimes.getAndAdd (System.currentTimeMillis ()); 打破; 默认值: 打破; } } } } Java线程优先级是什么