Как будет работать объект ReentrantLock, созданный внутри локальной области видимости метода? - PullRequest
2 голосов
/ 22 марта 2019

image

The above is a screen print from OCP 7 java se book. page 791.

My question is if a new ReentrantLock object is created in a method every time and locked, how would that stop two threads from running the code block in between lock and unlock? Won't the two threads create a ReentrantLock object each and lock it? I can imagine how this would work if lock object was a instance variable only instantiated once and never changed. (preferrably final).

Am I misunderstanding something?

I had already asked это и не получили четкого ответа.

1 Ответ

4 голосов
/ 22 марта 2019

Вы правы, создавая 'ReentrantLock' в самом методе каждый раз, чтобы синхронизировать Потоки с этой блокировкой не работает.Должен быть «общий» объект блокировки.

Пример в книге, возможно, слишком упрощен.

Документация ReentrantLock использует следующий пример:

class X {
   private final ReentrantLock lock = new ReentrantLock();
   // ...

   public void m() {
     lock.lock();  // block until condition holds
     try {
       // ... method body
     } finally {
       lock.unlock()
     }
   }
 }
...