Page 177 - 6571
P. 177

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

                  У  мові  Java  ключем  до  синхронізації  виступає  концепція
            монітора.        Монітор         у     мові      Java     –     це     об’єкт,       який
            використовується,  як  взаємовиключне  блокування  (mutually

            exclusive lock), або м’ютекс. Тільки один потік може в один і той
            же  самий  час  володіти  монітором.  Коли  потік  робить  запит  на
            блокування,  то  кажуть,  що  він  входить  в  монітор.  Всі  інші
            потоки, які  намагаються  увійти в заблокований  монітор, будуть

            призупинені до того часу, поки потік, що отримав блокування не
            покине  з  монітор.  Про  всі  інші  потоки  говорять,  що  вони

            очікують  монітора.  Потік,  який  володіє  монітором,  за
            необхідності може повторно в нього увійти.
                  У  термінології  мови  Java  монітор  володіє  наступними
            властивостями:

                  1. Монітор – це клас, що має тільки закриті поля.
                  2. У кожного об’єкта такого класу є зв’язане з ним блокування.
                  3. Всі  методи  блокуються  даним  блокуванням.  Тобто,  якщо

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

            буде  звернутися  із  жодного  потоку  доти,  поки  ними  маніпулює
            будь-який інший потік.
                  4. Блокування може мати будь-яку кількість пов’язаних з ним

            умов.
                  Розробники мови Java вільно адаптували принцип монітора.
            Кожен  об’єкт  в  Java  володіє  вбудованим  блокуванням  і

            вбудованою  умовою.  Якщо  метод  оголошений  із  ключовим
            словом  synchronized,  то  він  діє  як  метод  монітора.  Умовна
            змінна доступна через виклики методів wait(), notifyAll() та

            notify(). Проте, об’єкти в мові Java відрізняються від класичної
            реалізації монітора наступними трьома важливими пунктами, що
            потенційно можуть впливати на безпеку потоків:

                  1. Поля не обов’язково повинні бути закритими (private).




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