Java 线程调度器2025 年 3 月 28 日 | 阅读 3 分钟 Java 中决定哪个线程运行或执行以及哪个线程等待的组件称为 Java 中的线程调度器。在 Java 中,只有当线程处于可运行状态时,线程调度器才会选择该线程。但是,如果有一个以上线程处于可运行状态,则由线程调度器选择其中一个线程并忽略其他线程。有一些标准决定哪个线程将首先执行。调度线程有两个因素,即优先级和到达时间。 优先级:每个线程的优先级介于 1 到 10 之间。如果一个线程具有更高的优先级,则意味着该线程有更好的机会被线程调度器选中。 到达时间:假设两个具有相同优先级的线程进入可运行状态,那么优先级就不能成为从这两个线程中选择一个线程的因素。在这种情况下,线程调度器会考虑线程的到达时间。先到达的线程比其他线程优先。 线程调度算法基于上述因素,Java 线程调度器遵循调度算法。 先来先服务调度在此调度算法中,调度器选择首先到达可运行队列的线程。请看下表:
在上表中,我们可以看到线程 t1 最先到达,然后是线程 t2,然后是 t3,最后是 t4,线程的处理顺序是根据线程的到达时间。 ![]() 因此,线程 t1 将首先处理,线程 t4 将最后处理。 时间片调度通常,先来先服务算法是非抢占式的,这很糟糕,因为它可能导致无限阻塞(也称为饥饿)。为了避免这种情况,为线程提供了一些时间片,以便在一段时间后,运行中的线程必须放弃 CPU。因此,其他等待线程也有时间运行它们的任务。 ![]() 在上图中,每个线程都有 2 秒的时间片。因此,2 秒后,第一个线程离开 CPU,CPU 然后被线程 2 占用。其他线程也重复相同的过程。 抢占式优先级调度调度算法的名称表示该算法与线程的优先级有关。 ![]() 假设可运行状态中有多个线程可用。线程调度器选择优先级最高的线程。由于该算法也是抢占式的,因此也为线程提供了时间片以避免饥饿。因此,一段时间后,即使优先级最高的线程尚未完成其任务,它也必须由于抢占而释放 CPU。 Java 线程调度器的工作原理![]() 让我们了解 Java 线程调度器的工作原理。假设有五个线程具有不同的到达时间和不同的优先级。现在,线程调度器负责决定哪个线程将首先获得 CPU。 线程调度器选择优先级最高的线程,该线程开始执行任务。如果一个线程已经处于可运行状态,并且另一个优先级更高的线程到达可运行状态,那么当前线程将被处理器抢占,具有更高优先级的到达线程将获得 CPU 时间。 当两个具有相同优先级和到达时间的线程(线程 2 和线程 3)时,调度将根据 FCFS 算法决定。因此,首先到达的线程有机会首先执行。 |
我们请求您订阅我们的新闻通讯以获取最新更新。