前言
Java 的线程的调度机制由 JVM 实现,假如有若干条线程,你想让某些线程拥有更长的执行时间,或某些线程分配少点执行时间,这时就涉及“线程优先级”。
优先级别
Java 把线程优先级分成10个级别,线程被创建时如果没有明确声明则使用默认优先级,JVM 将根据每个线程的优先级分配执行时间的概率。有三个常量Thread.MIN_PRIORITY
、Thread.NORM_PRIORITY
、Thread.MAX_PRIORITY
分别表示最小优先级值(1)、默认优先级值(5)、最大优先级值(10)。
由于 JVM 的实现以宿主操作系统为基础,所以 Java 优先级值与各种不同操作系统的原生线程优先级必然存在某种映射关系,这样才足以封装所有操作系统的优先级提供统一优先级语义。例如1-10优先级值在 Linux 可能要与-20-19优先级值进行映射,而 Windows 系统则有9个优先级要映射。
优先级高先执行?
我们能否用优先级值的大小来控制线程的执行顺序呢?答案明显是不能的。这是因为影响线程优先级的因素有很多,包括:
* 不同版本的操作系统和 JVM 都可能行为不相同。
* 优先级对于不同操作系统调度器的意义可能不相同。
*