Методы планирования потоков Java: 1. Совместное планирование потоков. Многопоточные системы используют совместное планирование, и время выполнения потока контролируется самим потоком. 2. Вытесняющее планирование потоков. При использовании многопоточной системы с вытесняющим планированием время выполнения каждого потока будет распределяться системой.
Операционная среда этого руководства: система Windows 7, версия Java 10, компьютер DELL G3.
1. Совместное планирование потоков
Многопоточная система использует совместное планирование. Время выполнения потока контролируется самим потоком. После завершения работы потока он активно уведомляет систему о необходимости переключения на другой поток. Преимущество кооперативной многопоточности заключается в простоте реализации, поскольку поток переключает потоки после завершения своей работы. Операция переключения известна самому потоку, поэтому проблем с синхронизацией потоков обычно не возникает. Ее недостатки также очевидны: время выполнения потока невозможно контролировать, а если код потока написан неправильно и системе не разрешено переключать потоки, программа всегда будет блокироваться.
2. Упреждающее планирование потоков
При использовании многопоточной системы с упреждающим планированием время выполнения каждого потока будет распределяться системой, а переключение потоков не определяется самим процессом. Например, в Java есть метод Thread::yield(), который может активно отдавать время выполнения, но если вы хотите активно получать время выполнения, у самого потока такой возможности нет. Таким образом реализуется планирование потоков, и время выполнения потока контролируется системой. Не возникает проблем, когда один поток вызывает блокировку всего процесса или даже всей системы.
Выше приведены два метода планирования потоков Java. Надеюсь, они могут быть полезны всем.