线程优先级之间的区别

时间:2014-06-14 13:07:42

标签: java multithreading

线程优先级是什么意思?一个MAX_PRIORITY的线程是否会在具有MIN_PRIORITY的线程之前完成其执行?或者MAX_PRIORITY线程将被赋予更多的执行时间,然后MIN_PRIORITY线程?还是别的什么?

1 个答案:

答案 0 :(得分:0)

Thread的javadoc只说这个,“具有更高优先级的线程优先于优先级较低的线程执行。”这可能意味着不同的事情取决于您运行的JVM,更有可能的是,您正在运行的操作系统。

最简单的“优先级”解释,由一些实时嵌入式操作系统实现;当优先级较高的线程等待运行时,优先级较低的线程将从不运行。任何导致优先级较高的线程变为可运行的事件都会立即抢占优先级较低的线程。这种绝对优先级很容易实现,但它给程序员带来了负担,使得正确地将优先级分配给框中运行的不同进程的所有的所有不同线程。这就是为什么你通常不会在嵌入式系统之外看到它。

大多数通用操作系统都假设并非所有流程都旨在相互合作。他们试图做到公平,给每个想要CPU时间的线程一个平等的份额。通常这是通过根据一些公式不断调整线程的真正优先级来实现的,该公式考虑了最近过去不同线程所需的CPU数量,以及每个线程获得了多少。通常会有某种加权因子,让程序员说这个帖子应该获得比该线程更大的“份额”。 (例如,类Unix系统上的“漂亮”值。)

因为任何实际的JVM都必须依赖操作系统来提供线程调度,并且因为有很多不同的方法来解释“优先级”; Java并不试图决定“优先级”的真正含义。