Page 140 - 4868
P. 140
Ошибка! Стиль не определен. 138
отримають можливість виконуватися в середовищі операційної системи з не
витісняючою багатозадачністю.
Для встановлення пріоритету потоку, використовується визначений у
класі Threadметод setPriority(). Даний метод в якості параметра
приймає одне із цілочисельних значень, що визначають рівень пріоритету.
Значення рівня знаходиться в межах діапазону від MIN_PRIORITY до
МAX_PRIORITY. В даний час ці значення рівні відповідно 1 та 10. Щоб
повернути потоку пріоритет за замовчуванням, потрібно вказати рівень
NORM_PRIORITY, який в даний час дорівнює значенню 5. Дані рівні
пріоритету визначені в класі Threadяк змінні оголошені із модифікаторами
staticfinal.
Поточне значення пріоритету потоку можна отримати, викликавши
визначений у класі Thread метод getPriority(). Різні реалізації JVM
можуть виконувати планування потоків по різному. Найбільш безпечний
спосіб отримати передбачувану міжплатформенну поведінку полягає у
використанні потоків, що примусово здійснюють керування центральним
процесором.
У випадку, коли два або більше потоків мають доступ до спільно
ресурсу, необхідна гарантія того, що доступ до ресурсу в конкретний момент
часу буде мати тільки один потік. Процес виконання даної умови називається
сінхронізацією.
У мові Java ключем до синхронізації виступає концепція монітора.
Монітор у мові Java – це об’єкт, який використовується, як взаємовиключне
блокування (mutually exclusive lock), або м’ютекс. Тільки один потік може в
один і той же самий час володіти монітором. Коли потік робить запит на
блокування, то кажуть, що він входить в монітор. Всі інші потоки, які
намагаються увійти в заблокований монітор, будуть призупинені до того
часу, поки потік, що отримав блокування не покине з монітор. Про всі інші
потоки говорять, що вони очікують монітора. Потік, який володіє
монітором, за необхідності може повторно в нього увійти.
У термінології мови Java монітор володіє наступними властивостями:
1. Монітор – це клас, що має тільки закриті поля.
2. У кожного об’єкта такого класу є зв’язане з ним блокування.
3. Всі методи блокуються даним блокуванням. Тобто, якщо клієнт
викликає метод obj.method(), блокування об’єкта obj автоматично
захоплюється під час виклику цього методу і знімається під час його
завершення. А оскільки всі поля класу монітора закриті, то такий підхід
гарантує, що до них не можна буде звернутися із жодного потоку доти, поки
ними маніпулює будь-який інший потік.
4. Блокування може мати будь-яку кількість пов’язаних з ним умов.
Розробники мови Java вільно адаптували принцип монітора. Кожен
об’єкт в Java володіє вбудованим блокуванням і вбудованою умовою. Якщо
метод оголошений із ключовим словом synchronized, то він діє як метод
монітора. Умовна змінна доступна через виклики методів wait(),