首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除非底层操作系统支持抢占式多线程,否则Thread.setPriority会有什么影响吗?

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

Stack Overflow用户
提问于 2014-03-27 17:27:23
回答 2查看 120关注 0票数 0

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

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

对此有什么想法是非常感谢的?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-03-27 17:30:11

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

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

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

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

java开发人员应该知道这个应用程序将在哪个操作系统上运行,如果该操作系统使用抢占式多线程,那么只使用Thread.setPriority()?

不,而且你还没有透露你不这么想的真正原因。

票数 0
EN

Stack Overflow用户

发布于 2014-03-27 19:18:05

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

每个线程都有一个优先级。当存在处理资源竞争时,具有较高优先级的线程通常优先于具有较低优先级的线程执行。然而,这样的偏好并不能保证最高优先级的线程将始终运行,并且线程优先级不能用于可靠地实现互斥。

来自Java语言规范(第2版)的

  • 第445页。

还有..。

虽然在Java中存在线程优先级,并且许多参考文献指出,Java将总是选择最高优先级线程之一用于调度52、56、89,但这目前不受Java语言或虚拟机规范53、90的保证。优先级仅是对调度器 127的提示,第227页。

来自测试并发Java组件( 62.

  • Reference论文,2005)第127页的
  • (来自上面的摘录)来自组件软件:超越面向对象的编程(作者: C. Szyperski),Addison Wesley,1998。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22683219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档