Page 129 - 4868
P. 129
127 Ошибка! Стиль не определен.
керування. Таке рішення може призвести до того, що одна частина програми
буде домінувати над іншою і заблокує обробку будь-яких інших подій. Якщо
потік у однопотоковому оточенні блокується (тобто припиняє виконання) з
причини очікування деякого ресурсу, то виконання всієї програми
призупиняється.
Модель потоків і її підтримка в мові Java є програмним механізмом, що
спрощує одночасне виконання декількох операцій в межах однієї програми.
Процесор періодично втручається в події, виділяючи кожному потоку деякий
проміжок часу на його виконання. Зі сторони потоку все виглядає так, неначе
процесор використовується в монопольному режимі, але насправді час
процесора розділяється між усіма існуючими в програмі потоками (виняток
становить ситуація, коли програма дійсно виконується на
багатопроцесорному комп’ютері).
Потоки можуть перебувати в декількох станах: потік може
виконуватися; він може бути готовий до виконання, як тільки отримає час
центрального процесора; виконуваний потік може бути тимчасово
призупинений; виконання призупиненого потоку може бути поновлено; потік
може бути заблокований під час очікування певного ресурсу; у будь-який
момент часу потік може бути перерваний; одного разу перерваний потік
більше не може бути відновлений.
Під час запуску Java-програми, негайно починає виконуватися її
головний потік (main thread). Головний потік є важливим з двох причин: 1)
від даного потоку породжуються всі «дочірні» потоки; 2) часто він повинен
бути останнім потоком, що завершує виконання програми, оскільки може
виконувати різні завершальні дії.
Незважаючи на те, що головний потік створюється автоматично при
запуску програми, ним можна керувати через об’єкт класу Thread. Для цього
необхідно отримати посилання на нього, виконавши виклик методу
currentThread(), який є відкритим статичним методом класу
Thread.Даний метод повертає посилання на потік, з якого він був
викликаний. Отримавши посилання на головний потік, можна керувати ним
точно так само, як і будь-яким іншим потоком. Розглянемо наступний
приклад представлений у лістингу 2.3.
Лістинг 2.3 – Керування головним потоком
class CurrentThreadDemo {
public static void main(String args[]) {
Thread thread = Thread.currentThread();
System.out.println("Поточний потік:" + thread);
// змінити ім'я потоку
thread.setName("Main Thread");
System.out.println("Після зміни імені:" + thread);
try {
for (int n = 0; n > 5; n--) {
System.out.println(n);