Page 147 - 4868
P. 147
145 Ошибка! Стиль не определен.
секцію коду, але поки що не в змозі продовжити своє виконання.
Запитання для самоперевірки
1. Яким чином можна відслідкувати завершення потоку у мові Java?
2. Який призначення методу isAlive() у мові Java?
3. Яке призначення методу join() у мові Java?
4. З якою метою проводиться зміна пріоритету потоку?
5. Як встановити пріоритет потоку засобами мови Java?
6. Скільки рівнів пріоритетів потоку визначено у мові Java?
7. Який рівень пріоритету мають потоки у мові Java по замовчуванню?
8. Якими властивостями володіє монітор у термінології мови Java?
9. Які у мові Java використовуються механізми захисту критичної секції
коду від паралельного доступу?
10. Який вид блокування називається реентерабельним?
ЛЕКЦІЯ 20. ВБУДОВАНІ МЕТОДИ СИНХРОНІЗАЦІЇ
ПОТОКІВ
20.1. Використання ключового словаsynchronized
Інтерфейси Lock та Condition надають розробникам високу ступінь
контролю над блокуваннями. Але найчастіше такий контроль є зайвим, і
зазвичай буває достатньо механізму синхронізації, вбудованого в мову Java.
Процес синхронізації в мові Java є досить простим, оскільки усі об’єкти
володіють власними, асоційованими з ними неявними моніторами. Щоб
увійти в монітор об’єкта, необхідно просто викликати метод, модифікований
ключовим словом synchronized. Коли потік знаходиться всередині
синхронізованого методу, то всі інші потоки, які намагаються його викликати
з того ж екземпляру класу переводяться в режим очікування. Щоб вийти з
монітора і передати керування об’єктом іншому заблокованому потоку,
«власник» монітора просто повертає керування із синхронізованого методу.
Якщо метод оголошений з ключовим словом synchronized, то
блокування об’єкта захищає весь метод. Отже, щоб викликати метод
позначений ключовим словом synchronized, потік повинен захопити
вбудоване блокування об’єкта. Іншими словами, наступний фрагмент коду:
public synchronized void method() {
тіло методу;
}
рівнозначний наведеному нижче фрагменту коду.
public void method() {
this.intrinsicLock.lock();
try {
тіло методу;
} finally {