Page 237 - 6253
P. 237
РОЗДІЛ 10
БАГАТОПОТОКОВЕ ПРОГРАМУВАННЯ МОВОЮ JAVA
10.1. Керування головним потоком виконання
На відміну від інших мов програмування, мова Java пропонує вбудовану
підтримку багатопотокового програмування. Багатопотокова програма включає дві
або більше частин, які можуть виконуватися одночасно. Кожна частина такої
програми називається потоком (thread), і кожен потік задає окремий шлях
виконання. Система часу виконання Java залежить від потоків у багатьох
відношеннях і всі бібліотеки класів спроектовані з урахуванням багатопотоковості.
Фактично мова Java використовує потоки для того щоб забезпечити асинхронність у
всьому середовищі виконання, що дозволяє знизити неефективність програмного
коду зумовлену марним виконанням циклів центральним процесором.
Однопотокові системи використовують підхід, на основі циклу подій з
опитуванням. У даній моделі єдиний потік керування виконується в нескінченному
циклі, опитуючи єдину чергу подій. Як тільки потік керування сигналізує про те, що
мережевий файл готовий до читання, цикл подій передає керування відповідному
обробнику подій. У програмі не виконуються інші дії до того часу, поки обробник
подій не поверне керування. Таке рішення може призвести до того, що одна частина
програми буде домінувати над іншою і заблокує обробку будь-яких інших подій.
Якщо потік у однопотоковому оточенні блокується (тобто припиняє виконання) з
причини очікування деякого ресурсу, то виконання всієї програми призупиняється.
Модель потоків і її підтримка в мові Java є програмним механізмом, що
спрощує одночасне виконання декількох операцій в межах однієї програми.
Процесор періодично втручається в події, виділяючи кожному потоку деякий
проміжок часу на його виконання. Зі сторони потоку все виглядає так, неначе
процесор використовується в монопольному режимі, але насправді час процесора
розділяється між усіма існуючими в програмі потоками (виняток становить
ситуація, коли програма дійсно виконується на багатопроцесорному комп’ютері).
Потоки можуть перебувати в декількох станах: потік може виконуватися; він
може бути готовий до виконання, як тільки отримає час центрального процесора;
виконуваний потік може бути тимчасово призупинений; виконання призупиненого
236