Page 250 - 6253
P. 250
призупиненням або очікуванням завершення операції введення-виведення), то він
вивантажує низькопріоритетний потік.
Теоретично потоки з однаковим пріоритетом повинні отримувати однаковий
доступ до центрального процесора. Але оскільки мова Java спроектована для роботи
в широкому спектрі середовищ, то деякі з низ мають свій принцип реалізації
багатозадачності. Наприклад, в операційній системі Windows передбачено сім рівнів
пріоритетів. А у віртуальній машині Oracle для Linux пріоритети потоків взагалі
ігноруються.
З метою безпеки, потоки з однаковим пріоритетом повинні отримувати
однаковий доступ до центрального процесора. Це гарантує, що всі потоки
отримають можливість виконуватися в середовищі операційної системи з не
витісняючою багатозадачністю.
Для встановлення пріоритету потоку, використовується визначений у класі
Thread метод setPriority(). Даний метод в якості параметра приймає одне із
цілочисельних значень, що визначають рівень пріоритету. Значення рівня
знаходиться в межах діапазону від MIN_PRIORITY до МAX_PRIORITY. В даний
час ці значення рівні відповідно 1 та 10. Щоб повернути потоку пріоритет за
замовчуванням, потрібно вказати рівень NORM_PRIORITY, який в даний час
дорівнює значенню 5. Дані рівні пріоритету визначені в класі Thread як змінні
оголошені із модифікаторами static final.
Поточне значення пріоритету потоку можна отримати, викликавши визначений
у класі Thread метод getPriority(). Різні реалізації JVM можуть виконувати
планування потоків по різному. Найбільш безпечний спосіб отримати
передбачувану міжплатформенну поведінку полягає у використанні потоків, що
примусово здійснюють керування центральним процесором.
У випадку, коли два або більше потоків мають доступ до спільно ресурсу,
необхідна гарантія того, що доступ до ресурсу в конкретний момент часу буде мати
тільки один потік. Процес виконання даної умови називається синхронізацією.
У мові Java ключем до синхронізації виступає концепція монітора. Монітор у
мові Java – це об’єкт, який використовується, як взаємовиключне блокування
(mutually exclusive lock), або м’ютекс. Тільки один потік може в один і той же самий
249