除非底层操作系统支持抢占式多线程,否则Thread.setPriority会有什么影响吗?

时间:2014-03-27 09:27:23

标签: java multithreading

根据我的理解(可能是不正确的。如果是这样,请纠正我),线程调度程序(或线程调度程序)将决定哪个线程获得CPU时间(当多个线程竞争CPU时) )。此线程调度程序取决于操作系统。线程调度程序可以使用时间切片算法或抢先算法或其他。如果底层操作系统的线程调度程序使用时间切片算法,那么使用JAVA的Thread.setHightPriority()方法为线程设置高/低优先级会产生任何影响吗?

如果是,那么它如何对底层操作系统的线程调度程序产生影响? 如果没有,那么在这种情况下使用Thread.setPriority()方法有什么意义呢?如果java开发人员知道该应用程序将在哪个操作系统上运行,并且该操作系统是否使用抢占式多线程,那么只能使用Thread.setPriority()吗?

对此有何看法非常感谢?

感谢。

2 个答案:

答案 0 :(得分:0)

  

如果底层操作系统的线程调度程序使用时间切片算法,那么使用JAVA的Thread.setHightPriority()方法为线程设置高/低优先级会产生任何影响吗?

是。为什么你认为它不会?

  

如果是,那么它如何对底层操作系统的线程调度程序产生影响?

因为时间片仍然可以按优先级顺序分配。你似乎认为这是不可能的。为什么呢?

  

java开发人员是否应该知道该应用程序将在哪个操作系统上运行,以及该操作系统是否使用抢先式多线程,那么只能使用Thread.setPriority()?

不,你还没有透露你不这么认为的实际理由。

答案 1 :(得分:0)

在任何情况下,优先级只是调度程序的提示,不能依赖它们。

  

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

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

另外......

  

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

  • 来自测试并发Java组件(博士论文,2005) p。 62。

  • 参考文献127,第227页(摘自上文摘录)来自组件软件:超越面向对象编程(C. Szyperski),Addison Wesley,1998。

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