java :线程优先级是否被 JVM 更改(隐式地)
java : Is Thread priority changed by JVM(implicitly)
当我们创建 new Thread(Runnable target)
时,它将根据父线程具有一些优先级。
我的问题是,JVM 在任何情况下都可以更改优先级吗?
我没有使用 setPriority(int) 方法。
如果你问线程调度器是否有根据优先级调度线程,答案是没有。
它可以选择这样做(抢占式调度),但由平台决定使用哪种调度算法。
一些读物:
setPriority() method doesn't work properly
没有。它不会。只是补充一下,在引擎盖下,它的 OS 或系统最终调用了哪些线程 运行 在它的核心上,因此,它自己的调度算法最终很重要。
然而,JVM 将线程提供给 OS,这里优先级基于 JVM 调度算法再次发挥作用,但它的 OS 决定。
我没有看到对此有任何明确的保证,但它不是那种被授予明确保证的东西。
优先级有getter和setter,意思是除非有人再次调用setter,否则该值不会改变。
但请注意,这并不意味着系统的任何部分都不允许在 "your" 线程上调用 setPriority()
,只是 Thread
中没有内部欺骗class 本身。
当我们创建 new Thread(Runnable target)
时,它将根据父线程具有一些优先级。
我的问题是,JVM 在任何情况下都可以更改优先级吗?
我没有使用 setPriority(int) 方法。
如果你问线程调度器是否有根据优先级调度线程,答案是没有。
它可以选择这样做(抢占式调度),但由平台决定使用哪种调度算法。
一些读物:
setPriority() method doesn't work properly
没有。它不会。只是补充一下,在引擎盖下,它的 OS 或系统最终调用了哪些线程 运行 在它的核心上,因此,它自己的调度算法最终很重要。
然而,JVM 将线程提供给 OS,这里优先级基于 JVM 调度算法再次发挥作用,但它的 OS 决定。
我没有看到对此有任何明确的保证,但它不是那种被授予明确保证的东西。
优先级有getter和setter,意思是除非有人再次调用setter,否则该值不会改变。
但请注意,这并不意味着系统的任何部分都不允许在 "your" 线程上调用 setPriority()
,只是 Thread
中没有内部欺骗class 本身。