Page 244 - 6571
P. 244
Додаток 3
ЛАБОРАТОРНА РОБОТА № 3
Синхронізація потоків засобами мови Java
Мета: Навчитися виконувати захист критичних секцій про-
грамного коду шляхом синхронізації потоків з метою
уникнення пошкодження та втрати даних.
3.1 Теоретичні відомості
У мові Java ключем до синхронізації виступає концепція мо-
нітора. Монітор у мові Java – це об’єкт, який використовується,
як взаємовиключне блокування (mutually exclusive lock), або
м’ютекс. Тільки один потік може в один і той же самий час воло-
діти монітором. Коли потік робить запит на блокування, то ка-
жуть, що він входить в монітор. Всі інші потоки, які намагають-
ся увійти в заблокований монітор, будуть призупинені до того
часу, поки потік, що отримав блокування не покине з монітор.
Про всі інші потоки говорять, що вони очікують монітора. По-
тік, який володіє монітором, за необхідності може повторно в
нього увійти.
Розробники мови Java вільно адаптували концепцію моніто-
ра. Кожен об’єкт в Java володіє вбудованим блокуванням. Проте,
об’єкти в мові Java відрізняються від класичної реалізації моніто-
ра наступними трьома важливими пунктами, що потенційно мо-
жуть впливати на безпеку потоків:
1. Поля не обов’язково повинні бути закритими.
2. Методи не зобов’язані бути синхронізованими.
3. Клієнтам доступне керування вбудованим блокуванням.
Ці пункти свідчать про явне нехтування розробниками мови
Java вимогами безпеки, викладеними Пером Брінчем Хансеном
(Fer Brinch Hansen) і Тоні Хоаром (Тоnу Ноаrе) в 1970-х роках.
Щоб уникнути пошкодження даних, що спільно використо-
вуються декількома потоками, необхідно синхронізувати доступ
243