Page 259 - 6253
P. 259

10.5  Вбудовані методи синхронізації потоків


                    10.5.1  Використання ключового слова synchronized



                   Інтерфейси Lock та Condition надають розробникам високу ступінь контролю

            над  блокуваннями.  Але  найчастіше  такий  контроль  є  зайвим,  і  зазвичай  буває

            достатньо механізму синхронізації, вбудованого в мову Java.

                  Процес  синхронізації  в  мові  Java  є  досить  простим,  оскільки  усі  об’єкти

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

            монітор  об’єкта,  необхідно  просто  викликати  метод,  модифікований  ключовим

            словом synchronized. Коли потік знаходиться всередині синхронізованого методу, то

            всі  інші  потоки,  які  намагаються  його  викликати  з  того  ж  екземпляру  класу

            переводяться  в  режим  очікування.  Щоб  вийти  з  монітора  і  передати  керування

            об’єктом  іншому  заблокованому  потоку,  «власник»  монітора  просто  повертає

            керування із синхронізованого методу.

                  Якщо  метод  оголошений  з  ключовим  словом  synchronized,  то  блокування

            об’єкта  захищає  весь  метод.  Отже,  щоб  викликати  метод  позначений  ключовим

            словом synchronized, потік повинен захопити вбудоване блокування об’єкта. Іншими

            словами, наступний фрагмент коду:

                  public synchronized void method() {
                     тіло методу;

                  }
            рівнозначний наведеному нижче фрагменту коду.

                  public void method() {
                     this.intrinsicLock.lock();

                     try {
                        тіло методу;

                     } finally {
                        this.intrinsicLock.unlock();
                     }

                  }
                  Наприклад, замість явного блокування можна просто оголосити метод transfer()

            визначений  в  класі  Bank  із  ключовим  словом  synchronized.  При  цьому,  вбудоване

            блокування має єдину пов’язану з нею умову.

                  Окрім звичайних методів, допускається оголошувати синхронізованими також і


                                                              258
   254   255   256   257   258   259   260   261   262   263   264