2

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.

subject-q
  • 91
  • 3
  • 19

1 Answers1

4

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()
     }
   }
 }
Alexander Egger
  • 5,132
  • 1
  • 28
  • 42
  • beginners could potentially misunderstand this. as you may notice no one pointed this out in my previous question – subject-q Mar 22 '19 at 08:07