Page 259 - 6571
P. 259
Додаток 5
ЛАБОРАТОРНА РОБОТА № 5
Додаткові способи синхронізації та створення
пулу потоків у мові Java
Мета: Ознайомитися із додатковими методами не блокуючого
режиму синхронізованого доступу до спільних даних
та навчитися створювати пул потоків з метою ефекти-
вного керування множиною потоків у мові Java.
5.1 Теоретичні відомості
Часто для захисту одного або двох полів класу від асинхрон-
ного доступу потрібно синхронізувати доступ до усього об’єкта,
що є занадто затратною операцією в плані розподілу процесорно-
го часу. Ключове слово volatile використовується для встано-
влення не блокуючого режиму синхронізованого доступу до поля
класу. У випадку, коли поле класу оголошене із модифікатором
volatile, то компілятор і віртуальна машина враховують той
факт, що значення поля може бути паралельно модифіковане в
іншому потоці.
Ключове слово volatile може бути застосоване тільки до
змінних і має наступні ефекти в багатопотоковому програмуванні:
1) змінна завжди зчитується з основної пам’яті, і ніколи не
кешується в пам’ять потоку, а значить з будь-якого потоку зав-
жди доступне її актуальне значення;
2) при одночасних запитах на читання і запис від декількох
потоків, віртуальною машиною гарантується виконання спочатку
запитів на запис;
3) віртуальною машиною гарантується атомарність операцій
читання / запису, проте це актуально тільки для змінних типу
long і double, для інших типів даних ці дії у мові Java і так
атомарні. Для всіх інших операцій, таких, наприклад як інкре-
мент або декремент синхронізація виконується за допомогою зо-
258