Page 140 - 4868
P. 140

Ошибка! Стиль не определен.                                                              138

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

               МAX_PRIORITY.  В  даний  час  ці  значення  рівні  відповідно  1  та  10.  Щоб
               повернути  потоку  пріоритет  за  замовчуванням,  потрібно  вказати  рівень
               NORM_PRIORITY,  який  в  даний  час  дорівнює  значенню  5.  Дані  рівні
               пріоритету визначені в класі Threadяк змінні оголошені із модифікаторами
               staticfinal.
                     Поточне  значення  пріоритету  потоку  можна  отримати,  викликавши
               визначений  у  класі  Thread  метод  getPriority().  Різні  реалізації  JVM
               можуть  виконувати  планування  потоків  по  різному.  Найбільш  безпечний
               спосіб  отримати  передбачувану  міжплатформенну  поведінку  полягає  у
               використанні  потоків,  що  примусово  здійснюють  керування  центральним
               процесором.
                     У  випадку,  коли  два  або  більше  потоків  мають  доступ  до  спільно
               ресурсу, необхідна гарантія того, що доступ до ресурсу в конкретний момент
               часу буде мати тільки один потік. Процес виконання даної умови називається
               сінхронізацією.
                     У  мові  Java  ключем  до  синхронізації  виступає  концепція  монітора.
               Монітор у мові Java – це об’єкт, який використовується, як взаємовиключне
               блокування (mutually exclusive lock), або м’ютекс. Тільки один потік може в
               один  і  той  же  самий  час  володіти  монітором.  Коли  потік  робить  запит  на
               блокування,  то  кажуть,  що  він  входить  в  монітор.  Всі  інші  потоки,  які
               намагаються  увійти  в  заблокований  монітор,  будуть  призупинені  до  того
               часу, поки потік, що отримав блокування не покине з монітор. Про всі інші
               потоки  говорять,  що  вони  очікують  монітора.  Потік,  який  володіє
               монітором, за необхідності може повторно в нього увійти.
                     У термінології мови Java монітор володіє наступними властивостями:
                     1. Монітор – це клас, що має тільки закриті поля.
                     2. У кожного об’єкта такого класу є зв’язане з ним блокування.
                     3. Всі  методи  блокуються  даним  блокуванням.  Тобто,  якщо  клієнт
               викликає  метод  obj.method(),  блокування  об’єкта  obj  автоматично
               захоплюється  під  час  виклику  цього  методу  і  знімається  під  час  його
               завершення.  А  оскільки  всі  поля  класу  монітора  закриті,  то  такий  підхід
               гарантує, що до них не можна буде звернутися із жодного потоку доти, поки
               ними маніпулює будь-який інший потік.
                     4. Блокування може мати будь-яку кількість пов’язаних з ним умов.
                     Розробники  мови  Java  вільно  адаптували  принцип  монітора.  Кожен
               об’єкт в Java володіє вбудованим блокуванням і вбудованою умовою. Якщо
               метод оголошений із ключовим словом synchronized, то він діє як метод
               монітора.  Умовна  змінна  доступна  через  виклики  методів  wait(),
   135   136   137   138   139   140   141   142   143   144   145