如何在方法的本地范围内创建ReentrantLock对象?

问题描述 投票:2回答:1

以上是来自OCP 7 java se book的屏幕打印。第791页。

我的问题是,如果每次在方法中创建一个新的ReentrantLock对象并锁定,那么如何阻止两个线程在lockunlock之间运行代码块?两个线程不会分别创建一个ReentrantLock对象并将其锁定吗?我可以想象如果lock对象是一个仅实例化一次并且从未改变的实例变量,它将如何工作。 (最好是final)。

我误会了什么吗?

我已经问过this并没有得到明确的答案。

java multithreading locking java.util.concurrent reentrantlock
1个回答
4
投票

你是正确的,每次在方法本身创建一个'ReentrantLock',以便同步该锁上的线程不起作用。必须有一个“共享”锁定对象。

书中的例子可能有点过于简单化了。

documentation of ReentrantLock使用以下示例:

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

   public void m() {
     lock.lock();  // block until condition holds
     try {
       // ... method body
     } finally {
       lock.unlock()
     }
   }
 }
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.