JAVA多线程优先级运行顺序的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA多线程优先级运行顺序的问题相关的知识,希望对你有一定的参考价值。
先上代码
class myRunnable1 implements Runnable
public void run()
for(int i=0;i<50000;i++)
System.out.print("1");
class myRunnable2 implements Runnable
public void run()
for(int i=0;i<50000;i++)
System.out.print("2");
class myRunnable3 implements Runnable
public void run()
for(int i=0;i<50000;i++)
System.out.print("3");
class myRunnable4 implements Runnable
public void run()
for(int i=0;i<50000;i++)
System.out.print("4");
class myRunnable5 implements Runnable
public void run()
for(int i=0;i<50000;i++)
System.out.print("5");
class myRunnable6 implements Runnable
public void run()
for(int i=0;i<50000;i++)
System.out.print("6");
public class myRun
public static void main(String[] args)
myRunnable1 mr1=new myRunnable1();
myRunnable2 mr2=new myRunnable2();
myRunnable3 mr3=new myRunnable3();
myRunnable4 mr4=new myRunnable4();
myRunnable5 mr5=new myRunnable5();
myRunnable6 mr6=new myRunnable6();
Thread t1=new Thread(mr1);
Thread t2=new Thread(mr2);
Thread t3=new Thread(mr3);
Thread t4=new Thread(mr4);
Thread t5=new Thread(mr5);
Thread t6=new Thread(mr6);
t1.setPriority(Thread.MAX_PRIORITY);
t2.setPriority(Thread.MAX_PRIORITY);
t3.setPriority(Thread.MAX_PRIORITY);
t4.setPriority(Thread.MAX_PRIORITY);
t5.setPriority(Thread.MAX_PRIORITY);
t6.setPriority(Thread.MIN_PRIORITY);
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
t6.start();
设置了优先级,6个线程运行的顺序是随机的。最开始我只写了2个线程,设置优先级,运行随机,我以为是4核CPU可以同时运行,所以不分优先级。后来我写了6个线程,也把运行次数提升到了50000次,前5个线程最高优先级,第六个最低优先级,但运行顺序还是随机的。求各位高手解释啊。。。
深入说的话,其实。。很深。。
首先说 线程优先级,并不能保证优先级高的先运行,也不保证优先级高的更多的分配CPU时间,只是对系统的建议而已,到底运行哪个,是操作系统决定的,都不是java说了算的。
另外java只能保证在线程内部看起来是顺序执行你的代码的,并不能保证从其他线程看来这个是按照你编码顺序执行的。。追问
- -|||但至少几率应该大点儿吧。。。我运行了很多次。。。完全没发现有任何优先级体现出来啊。。。那优先级有啥意义呢?
追答根据java语言规范,程序的正确性和性能保障,不能依靠优先级。
要靠程序自己控制。
优先级这个东西一般在系统资源紧缺的情况下可能会比较明显。
你这个经过运行时优化之后,几乎没有什么了。
所以体现不出来。
优先级高就是说同等条件下我运行的概率会比优先级低的高,至于具体怎么分配,这样看虚拟机的策略。但是肯定不会是像你想的那样,优先级高的运行完才运行优先级低的 参考技术B 设置优先级只是让CPU选择优先级高的执行机会大一点,不代表必定执行的次数多,就像一个袋子有3个红球,2个蓝球,摸十次,并不代表红球摸到的次数多,只是说被摸到的机率大而已
Java之多线程优先级基础
线程得到cpu的给的时间才能运行
有一个同步方法,里面有一个线程进去了,外面A,B俩线程在排队,A优先级比B优先级高,等到同步方法里面的线程出去了,
一定是A先进去;
但是:
因此,仅将高优先级赋予一个线程,将低优先级赋予另一个线程,并不是一定就意味着高优先级的线程会比低优先级的线程执行
速度更快或者是得到的运行时间更多
高优先级,仅仅具有获得更多CPU时间的可能性;
语法:
final int getPriority(time);
首先你得有一个线程对象引用,才能设置这个线程本身的优先级;
这段代码,mt1.thrd 和 mt2.thrd 是两个线程 直接点出set方法 至于括号里面的是Thread类里面的静态默认值,默认值是5
也可以直接写数字
以上是关于JAVA多线程优先级运行顺序的问题的主要内容,如果未能解决你的问题,请参考以下文章