How will ReentrantLock object created inside a met

2019-07-11 06:51发布

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.

1条回答
我欲成王,谁敢阻挡
2楼-- · 2019-07-11 07:11

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()
     }
   }
 }
查看更多
登录 后发表回答