Page 241 - 6571
P. 241
Теоретично потоки з однаковим пріоритетом повинні отри-
мувати однаковий доступ до центрального процесора. Але оскі-
льки мова Java спроектована для роботи в широкому спектрі се-
редовищ, то деякі з них мають свій принцип реалізації багатоза-
дачності. Наприклад, в операційній системі Windows передбачено
сім рівнів пріоритетів. А у віртуальній машині Oracle для Linux
пріоритети потоків взагалі ігноруються.
З метою безпеки, потоки з однаковим пріоритетом повинні
отримувати однаковий доступ до центрального процесора. Це га-
рантує, що всі потоки отримають можливість виконуватися в се-
редовищі операційної системи з не витісняючою багатозадачніс-
тю.
Для встановлення пріоритету потоку, використовується ви-
значений у класі Thread метод setPriority(). Даний метод
в якості параметра приймає одне із цілочисельних значень, що
визначають рівень пріоритету. Значення пріоритету знаходиться
в межах діапазону від MIN_PRIORITY до MAX_PRIORITY. Ці
значення відповідно рівні цілим числам 1 та 10. Щоб повернути
потоку пріоритет за замовчуванням, потрібно вказати рівень
NORM_PRIORITY, який в даний час дорівнює значенню 5.
Поточне значення пріоритету потоку можна отримати, ви-
кликавши визначений у класі Thread метод getPriority().
Різні реалізації JVM можуть виконувати планування потоків по
різному. Найбільш безпечний спосіб отримати передбачувану
міжплатформенну поведінку полягає у використанні потоків, що
примусово здійснюють керування центральним процесором.
Зазвичай Java-програма виконується до завершення всіх її
потоків. Проте, іноді зустрічаються потоки, що працюють у фо-
новому режимі, виконуючи певні допоміжні функції. Такий до-
поміжний потік можна помітити як потік-демон (daemon thread),
що говорить JVM про те, що не потрібно очікувати його завер-
шення перед завершенням роботи всієї програми. Іншими слова-
ми, програма на Java виконується до тих пір, поки не завершиться
останній потік, що не є демоном.
Щоб потік вважався демоном, із об’єкту що його представляє
необхідно викликати метод setDaemon(), який приймає булеве
значення. Якщо аргумент рівний true, то потік отримує статус
демона, а якщо false, то він є звичайним потоком. Статус пото-
240