Page 176 - 6571
P. 176

інших  факторів,  окрім  його  пріоритету  (наприклад,  від  того,  як
                  операційна  система  реалізує  багатозадачність,  може  залежати
                  відносна  доступність  процесорного  часу)  Високопріоритетний
                  потік  має  змогу  також  переривати  роботу  низькопріоритетного.

                  Наприклад,  коли  низькопріоритетний  потік  виконується,  а
                  високопріоритетний  збирається  продовжити  своє  перерване
                  виконання  (у  зв’язку  із  призупиненням  або  очікуванням

                  завершення  операції  введення-виведення),  то  він  вивантажує
                  низькопріоритетний потік.
                        Теоретично  потоки  з  однаковим  пріоритетом  повинні
                  отримувати  однаковий  доступ  до  центрального  процесора.  Але

                  оскільки мова Java спроектована для роботи в широкому спектрі
                  середовищ,  то  деякі  з  низ  мають  свій  принцип  реалізації

                  багатозадачності.  Наприклад,  в  операційній  системі  Windows
                  передбачено  сім  рівнів  пріоритетів.  А  у  віртуальній  машині
                  Oracle для Linux пріоритети потоків взагалі ігноруються.
                        З  метою  безпеки,  потоки  з  однаковим  пріоритетом  повинні

                  отримувати  однаковий  доступ  до  центрального  процесора.  Це
                  гарантує,  що  всі  потоки  отримають  можливість  виконуватися  в
                  середовищі           операційної          системи         з     не      витісняючою

                  багатозадачністю.
                        Для  встановлення  пріоритету  потоку,  використовується
                  визначений у класі Thread метод setPriority(). Даний метод
                  в  якості  параметра  приймає  одне  із  цілочисельних  значень,  що

                  визначають  рівень  пріоритету.  Значення  рівня  знаходиться  в
                  межах діапазону від MIN_PRIORITY до МAX_PRIORITY. В даний

                  час ці значення рівні відповідно 1 та 10. Щоб повернути потоку
                  пріоритет         за     замовчуванням,            потрібно        вказати        рівень
                  NORM_PRIORITY,  який  в  даний  час  дорівнює  значенню  5.  Дані
                  рівні пріоритету визначені в класі Thread як змінні оголошені із

                  модифікаторами static final.
                        Поточне  значення  пріоритету  потоку  можна  отримати,

                  викликавши визначений у класі Thread метод getPriority().
                  Різні  реалізації  JVM  можуть  виконувати  планування  потоків  по
                  різному.  Найбільш  безпечний  спосіб  отримати  передбачувану
                  міжплатформенну поведінку полягає у використанні потоків, що

                  примусово здійснюють керування центральним процесором.




                                                             175
   171   172   173   174   175   176   177   178   179   180   181