根据我的理解(可能是不正确的。如果是这样,请纠正我),线程调度程序(或线程调度程序)将决定哪个线程获得CPU时间(当多个线程竞争CPU时) )。此线程调度程序取决于操作系统。线程调度程序可以使用时间切片算法或抢先算法或其他。如果底层操作系统的线程调度程序使用时间切片算法,那么使用JAVA的Thread.setHightPriority()方法为线程设置高/低优先级会产生任何影响吗?
如果是,那么它如何对底层操作系统的线程调度程序产生影响? 如果没有,那么在这种情况下使用Thread.setPriority()方法有什么意义呢?如果java开发人员知道该应用程序将在哪个操作系统上运行,并且该操作系统是否使用抢占式多线程,那么只能使用Thread.setPriority()吗?
对此有何看法非常感谢?
感谢。
答案 0 :(得分:0)
如果底层操作系统的线程调度程序使用时间切片算法,那么使用JAVA的Thread.setHightPriority()方法为线程设置高/低优先级会产生任何影响吗?
是。为什么你认为它不会?
如果是,那么它如何对底层操作系统的线程调度程序产生影响?
因为时间片仍然可以按优先级顺序分配。你似乎认为这是不可能的。为什么呢?
java开发人员是否应该知道该应用程序将在哪个操作系统上运行,以及该操作系统是否使用抢先式多线程,那么只能使用Thread.setPriority()?
不,你还没有透露你不这么认为的实际理由。
答案 1 :(得分:0)
在任何情况下,优先级只是调度程序的提示,不能依赖它们。
每个帖子都有优先权。有竞争加工时 资源,具有较高优先级的线程通常在执行 对优先级较低的线程的偏好。 这种偏好不是, 但是,保证最高优先级的线程永远是 运行,并且线程优先级不能用于可靠地实现 相互排斥。
另外......
虽然Java中存在线程优先级,但许多引用都是状态 JVM将始终选择一个最高优先级的线程 对于调度[52,56,89],目前不能保证 Java语言或虚拟机规范[53,90]。的优先级 只是调度程序的提示 [127,第227页]。
来自测试并发Java组件(博士论文,2005) p。 62。
参考文献127,第227页(摘自上文摘录)来自组件软件:超越面向对象编程(C. Szyperski),Addison Wesley,1998。
简而言之,不依赖于线程优先级。