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
   245   246   247   248   249   250   251   252   253   254   255