java中线程的优先级

时间:2013-10-02 07:50:28

标签: java

每次运行程序时,执行顺序因最大优先级分配而发生变化o线程b应首先启动并首先完成输出不相应

threadA.setPriority(Thread.MIN_PRIORITY);
threadB.setPriority(Thread.MAX_PRIORITY)
System.out.println("Start Thread A");
threadA.start();

System.out.println("Start Thread B");
threadB.start();

System.out.println("End of main Thread");

3 个答案:

答案 0 :(得分:3)

我想引用xagyg的回答:

  

让我们保持简单,直接找到源......

     

每个帖子都有优先权。有竞争加工时   资源,具有较高优先级的线程通常在执行   对优先级较低的线程的偏好。这种偏好不是,   但是,保证最高优先级的线程永远是   运行,并且线程优先级不能用于可靠地实现   相互排斥。

     

来自Java语言规范(第2版)第445页。还......

     

虽然Java中存在线程优先级,但许多引用都是状态   JVM将始终选择一个最高优先级的线程   对于调度[52,56,89],目前不能保证   Java语言或虚拟机规范[53,90]。优先级   仅提示调度程序[127,第227页]。

     

来自Testing Concurrent Java Components(PhD Thesis,2005)p。 62。

     

参考127,第227页(摘自上面的摘录)来自Component   软件:超越面向对象的编程(由C. Szyperski提供),   Addison Wesley,1998年。

     

简而言之,不要依赖线程优先级。

link to the post

答案 1 :(得分:1)

线程优先级是操作系统的提示,只有在使用非常高的情况下才有意义。所有CPU上100%的CPU利用率。一个线程可以在另一个线程启动时运行完成。

BTW:您必须是Windows上的管理员和root或Linux上具有setcap权限才能提高优先级。

简而言之,改变优先级是无用的,不能依赖。

答案 2 :(得分:0)

如果你的计算机有两个或多个核心运行两个线程(每个都分配给它自己的核心) - 这是通常的情况 - 那么线程优先级现在可能已经生效。每个线程都将以最大单核速度运行。

另外:首先从主线程启动线程A.然后你启动线程B.主线程有多快?线程A是否比启动线程更快 - 线程B?

如果您想确保执行顺序,则必须使用join,而不是优先级。

另见Java Thread priority has no effect