Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-线程优先级是绝对的吗?_Java_Multithreading_Thread Priority - Fatal编程技术网

Java-线程优先级是绝对的吗?

Java-线程优先级是绝对的吗?,java,multithreading,thread-priority,Java,Multithreading,Thread Priority,例如,我运行了几个具有不同优先级的无止境线程。当线程切换发生时,是否会选择低优先级的线程?优先级是绝对的还是只影响线程选择概率。 谢谢,大多数调度程序都基于。这些优先级主要基于程序的行为。内核将您分配的线程优先级视为更多的“提示” 例如,如果一个线程执行大量IO,那么由于MFQ的操作方式,即使它的优先级低于另一个线程,也可以更频繁地调度它。花费更多调度量的线程将被移动到MFQ中优先级较低的线程。放弃部分量子(即IO)的线程可能会保持当前优先级 如果您为线程1分配了比线程2更高的优先级,并且他们正

例如,我运行了几个具有不同优先级的无止境线程。当线程切换发生时,是否会选择低优先级的线程?优先级是绝对的还是只影响线程选择概率。
谢谢,

大多数调度程序都基于。这些优先级主要基于程序的行为。内核将您分配的线程优先级视为更多的“提示”

例如,如果一个线程执行大量IO,那么由于MFQ的操作方式,即使它的优先级低于另一个线程,也可以更频繁地调度它。花费更多调度量的线程将被移动到MFQ中优先级较低的线程。放弃部分量子(即IO)的线程可能会保持当前优先级


如果您为线程1分配了比线程2更高的优先级,并且他们正在处理类似的任务,那么线程1得到调度的可能性就更高。这并不意味着线程1必须比线程2更频繁地调度,它只是向内核提示您希望它比线程2更频繁地调度。最后,由内核决定何时调度哪个线程。

根据实现的不同,它可能重复,也可能不重复。它根本不必有任何影响。还应该提到的是,答案取决于底层的操作系统。在windows上,线程优先级过去相当严格,因此只有在没有高优先级线程等待时,低优先级线程才会运行。在最近的版本中,它可能已经发生了变化。在linux上,线程优先级更像是一种暗示,只有当java进程有权更改“nice”值(通常意味着以root身份运行)时,线程优先级才真正起作用。@Darren:对,即使你知道操作系统,你也需要知道实际使用的JVM如何将java优先级映射到本机优先级,也就是说,不同的Java线程优先级可能映射到相同的OS线程优先级,这可能会随着版本的不同而变化(Sun/Oracle的JVM的不同版本也有变化)。