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

Java - is thread priority absolute?

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

大多数调度程序都基于 multilevel feedback queues。这些优先级主要基于程序的行为。内核将您分配的线程优先级视为 'hint'。

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

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