Что такое Thread Scheduler в Java?

«Что такое Thread Scheduler в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Thread Scheduler (Планировщик потоков) — это компонент JVM (часто делегирующий задачу операционной системе), который решает, какой из Runnable-потоков должен выполняться в данный момент на доступном процессорном ядре.

Ключевые принципы:

  • Не гарантирует порядок или справедливость. Выполнение непредсказуемо и зависит от реализации JVM и ОС.
  • Использует приоритеты потоков (1-10). Потоки с более высоким приоритетом (Thread.MAX_PRIORITY) с большей вероятностью будут выбраны для выполнения, но это лишь рекомендация, а не строгое правило.
  • Работает по принципу вытесняющей многозадачности (Preemptive Multitasking). Поток может быть приостановлен в любой точке выполнения.

Пример, демонстрирующий непредсказуемость:

Thread t1 = new Thread(() -> System.out.println("Thread 1"));
Thread t2 = new Thread(() -> System.out.println("Thread 2"));
t1.start();
t2.start();
// Порядок вывода "Thread 1" и "Thread 2" может быть любым

Для контроля порядка используйте механизмы синхронизации:

  • Thread.join() для ожидания завершения потока.
  • synchronized, Lock.
  • Высокоуровневые инструменты: ExecutorService, CompletableFuture.