Переключение между потоками
1. Планировщик потоков
Планировщик потоков – это часть JVM, которая решает какой поток должен выполнится в каждый конкретный момент времени и какой поток нужно приостановить.
2. Действия при переключении контекста
- Сохранение контекста потока, закончившего выполнение.
- Помещение этого потока в конец очереди, соответствующей его приоритету.
- Загружает контекст потока из очереди готовых к выполнению с наибольшим приоритетом.
- Удаляет загруженный поток из очереди и начинает его выполнять.
3. Правила, определяющие когда должно происходить переключение контекста
- Закончился выделенный планировщиком квант времени.
- Поток может добровольно уступить управление. Для этого достаточно явно уступить очередь на исполнение, приостановить или блокировать поток на время ожидания ввода вывода.
- Один поток исполнения может быть вытеснен другим, более приоритетным потоком.
4. Что гарантирует Java?
- Когда речь идет о потоках, Java практически ничего не гарантирует. (When it comes to threads, very little is guaranteed.)
- Java НЕ гарантирует, что потоки будут выполнены в том порядке в котором они были запущены.
- Нет гарантии, что если поток начал свое выполнение, то он выполнит свою работу не прерываясь.
- При каждом новом запуске программы, результат может быть разным.
- Гарантируется, что каждый поток начнет свою работу и будет выполнять пока не закончит.
- Внутри одного потока действия выполняются в предсказуемом порядке.
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()
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.