根据我的理解(这可能是不正确的。如果是这样,请纠正我),线程调度器(或线程调度器)将决定哪个线程获得CPU时间(当多个线程竞争CPU时)。此线程调度程序依赖于操作系统。线程调度器可以使用时间切片算法或抢占算法或其他算法。如果底层操作系统的线程调度程序使用时间切片算法,那么使用JAVA的Thread.setHightPriority()方法为线程设置高/低优先级会有任何影响吗?
如果是,那么它如何影响底层操作系统的线程调度程序?如果不是,那么在这种情况下使用Thread.setPriority()方法的意义是什么?java开发人员是否应该知道这个应用程序将在哪个操作系统上运行,如果该操作系统使用抢占式多线程,那么只使用Thread.setPriority()?
对此有什么想法是非常感谢的?
谢谢。
发布于 2014-03-27 17:30:11
如果底层操作系统的线程调度程序使用时间分片算法,那么使用JAVA的Thread.setHightPriority()方法为线程设置高/低优先级会有任何影响吗?
是。你为什么认为它不会呢?
如果是,那么它如何影响底层操作系统的线程调度程序?
因为时间片仍然可以按优先级顺序分配。你似乎认为这是不可能的。为什么?
java开发人员应该知道这个应用程序将在哪个操作系统上运行,如果该操作系统使用抢占式多线程,那么只使用Thread.setPriority()?
不,而且你还没有透露你不这么想的真正原因。
发布于 2014-03-27 19:18:05
在任何情况下,优先级只是对调度器的提示,它们不能被依赖。
每个线程都有一个优先级。当存在处理资源竞争时,具有较高优先级的线程通常优先于具有较低优先级的线程执行。然而,这样的偏好并不能保证最高优先级的线程将始终运行,并且线程优先级不能用于可靠地实现互斥。
来自Java语言规范(第2版)的
还有..。
虽然在Java中存在线程优先级,并且许多参考文献指出,Java将总是选择最高优先级线程之一用于调度52、56、89,但这目前不受Java语言或虚拟机规范53、90的保证。优先级仅是对调度器 127的提示,第227页。
来自测试并发Java组件( 62.
简而言之,不依赖于线程优先级。
https://stackoverflow.com/questions/22683219
复制相似问题