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
   236   237   238   239   240   241   242   243   244   245   246