Search code examples
javamultithreadinglockingjava.util.concurrentreentrantlock

How will ReentrantLock object created inside a method's local scope work?


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 this and Did not get a clear answer.


Solution

  • You are right creating a 'ReentrantLock' in the method itself each and every time in order to synchronise Threads on that lock does not work. There has to be a "shared" lock object.

    The example in the book is maybe a bit too simplistic.

    The documentation of ReentrantLock uses the following example:

    class X {
       private final ReentrantLock lock = new ReentrantLock();
       // ...
    
       public void m() {
         lock.lock();  // block until condition holds
         try {
           // ... method body
         } finally {
           lock.unlock()
         }
       }
     }