Page 175 - 6571
P. 175
}
}
class Main {
public static void main(String args[]) {
MyThread ob1 = new MyThread("Перший");
MyThread ob2 = new MyThread("Другий");
MyThread ob3 = new MyThread("Третій");
System.out.println(ob1.thread.getName() +
"потік запущений:" + ob1.thread.isAlive());
System.out.println(ob2.thread.getName() +
"потік запущений:" + ob2.thread.isAlive());
System.out.println(ob3.thread.getName() +
"потік запущений:" + ob3.thread.isAlive());
try {
System.out.println("Очікування завершення пото-
ків");
ob1.thread.join();
ob2.thread.join();
ob3.thread.join();
} catch (InterruptedException e) {
System.out.println("Головний потік перерваний");
System.out.println(ob1.thread.getName() +
"потік запущений:" + ob1.thread.isAlive());
System.out.println(ob2.thread.getName() +
"потік запущений:" + ob2.thread.isAlive());
System.out.println(ob3.thread.getName() +
"потік запущений:" + ob3.thread.isAlive());
System.out.println("Головний потік завершений");
}
}
}
Як видно із представленого прикладу, потоки припиняють
роботу після того, як виклики методу join() повернуть
керування головному потоку.
19.2 Керування пріоритетами потоків та їх синхронізація
Планувальник потоків використовує пріоритети потоків для
прийняття рішення про те, коли кожен із потоків має працювати.
Теоретично високопріоритетні потоки отримують більше
процесорного часу, ніж низькопріоритетні. Практично обсяг
процесорного часу, який отримує потік, часто залежить і від
174