在本教程中,我们将讨论Java 线程调度程序如何根据优先级执行线程。此外,我们还将介绍 Java 中的线程优先级类型。
在 Java 中,线程的优先级是一个 1 到 10 之间的整数。整数越大,优先级越高。线程调度程序使用每个线程的这个整数来确定应该允许哪个线程执行。Thread类定义了三种类型的优先级:
Thread 类将这些优先级类型定义为常量 MIN_PRIORITY、NORM_PRIORITY和MAX_PRIORITY,其值分别为 1、5 和 10。NORM_PRIORITY 是 new Thread 的默认优先级。
JVM 支持一种称为固定优先级抢占式调度的调度算法。所有 Java 线程都有优先级,JVM 首先为优先级最高的线程提供服务。
当我们创建一个线程时,它会继承其默认优先级。当多个线程准备执行时,JVM 将选择并执行具有最高优先级的Runnable线程。如果此线程停止或变为不可运行,则将执行优先级较低的线程。如果两个线程具有相同的优先级,JVM 将按 FIFO 顺序执行它们。
有两种情况可能会导致不同的线程运行:
一般情况下,任何时候,优先级最高的线程都先运行。但有时,线程调度程序可能会选择执行优先级较低的线程,以避免出现资源匮乏的情况。
Java 的Thread类提供了检查线程优先级和修改优先级的方法。getPriority() 实例方法返回表示其优先级的整数。setPriority() 实例方法采用 1 到 10 之间的整数来更改线程的优先级。如果我们传递 1-10 范围之外的值,该方法将抛出错误。