Page 265 - 6571
P. 265
5.2 Порядок виконання роботи
1. Ознайомитися із теоретичними відомостями до лаборатор-
ної роботи.
2. Написати код який демонструє переваги використання
ключових слів volatile та final у порівнянні із засто-
суванням блокуючого режиму синхронізованого доступу.
3. Створити два пули потоків: перший із фіксованою кількіс-
тю потоків, а другий – на основі кешу потоків.
4. Створити невеликий масив цілих чисел (до 10-ти чисел) та
написати код який буде робити певну операцію над кож-
ним елементом масиву (наприклад, множити його на деяке
число). Для того, щоб імітувати складність операції над
кожним елементом масиву, перед її виконанням викликати
метод Thread.sleep() із довільним значенням.
5. Виконати написаний раніше код спочатку в одному потоці,
а потім асинхронно, використовуючи фіксований пул пото-
ків та пул на основі кешу потоків. Порівняти час необхід-
ний на виконання одного і того ж коду з використанням рі-
зних підходів.
6. Створити список задач у яких передбачається знаходження
мінімального та максимального елемента масиву, а також
суми та добутку усіх елементів масиву і відправити їх на
виконання пулу потоків. Повернути результат виконання
кожної із задач та вивести усі результати на екран.
7. Модифікувати попередній код таким чином, щоб тепер ко-
жна задача виконувалася із затримкою у п’ять секунд після
виконання попередньої задачі.
8. У звіті до лабораторної роботи представити знімки робочої
програми.
9. Оформити звіт та зробити висновки по роботі.
5.3 Контрольні запитання
1. Який режим синхронізованого доступу до спільних даних
називається не блокуючим?
2. У яких випадках використовуються оператори volatile
та final?
3. У чому полягає відмінність під час використання операто-
рів volatile та final?
264