Переключение между потоками

Author: Tatyana Milkina

1. Планировщик потоков

Планировщик потоков – это часть JVM, которая решает какой поток должен выполнится в каждый конкретный момент времени и какой поток нужно приостановить.

2. Действия при переключении контекста

  1. Сохранение контекста потока, закончившего выполнение.
  2. Помещение этого потока в конец очереди, соответствующей его приоритету.
  3. Загружает контекст потока из очереди готовых к выполнению с наибольшим приоритетом.
  4. Удаляет загруженный поток из очереди и начинает его выполнять.

3. Правила, определяющие когда должно происходить переключение контекста

  • Закончился выделенный планировщиком квант времени.
  • Поток может добровольно уступить управление. Для этого достаточно явно уступить очередь на исполнение, приостановить или блокировать поток на время ожидания ввода вывода.
  • Один поток исполнения может быть вытеснен другим, более приоритетным потоком.

4. Что гарантирует Java?

  1. Когда речь идет о потоках, Java практически ничего не гарантирует. (When it comes to threads, very little is guaranteed.)
  2. Java НЕ гарантирует, что потоки будут выполнены в том порядке в котором они были запущены.
  3. Нет гарантии, что если поток начал свое выполнение, то он выполнит свою работу не прерываясь.
  4. При каждом новом запуске программы, результат может быть разным.
  5. Гарантируется, что каждый поток начнет свою работу и будет выполнять пока не закончит.
  6. Внутри одного потока действия выполняются в предсказуемом порядке.

5. Методы позволяющие влиять на планировщика потоков

Методы класса java.lang.Thread:

  • public static void sleep(long millis) throws InterruptedException
  • public static void yield()
  • public final void join() throws InterruptedException
  • public final void setPriority(int newPriority)

Методы класса java.lang.Object:

  • public final void wait() throws InterruptedException
  • public final void notify()
  • public final void notifyAll()
Читайте также:
Комментарии