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

标签 java multithreading thread-priority

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

最佳答案

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

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

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

关于Java - 线程优先级是绝对的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30105856/

相关文章:

带数据库的 Java GUI

java - 线程计数器在第一个刻度后不会增加

multithreading - F# 同时在多个线程中更新列表

c++ - 有没有办法以给定的优先级执行系统命令?

java - Spring - 添加一个低优先级的多线程服务(不影响生产性能)

java - 在jsp和java之间重用变量名(Spring)

java - 变量需要声明为final

java - 使用 'if' 语句检查后出现空指针异常

c# - WinForms 如何强制执行线程亲和性?

java - 为什么线程优先级不起作用?