Java 如何在方法';什么是局部范围的工作?

Java 如何在方法';什么是局部范围的工作?,java,multithreading,locking,java.util.concurrent,reentrantlock,Java,Multithreading,Locking,Java.util.concurrent,Reentrantlock,以上是OCP7JavaSE书籍中的屏幕打印。第791页 我的问题是,如果每次都在方法中创建一个新的ReentrantLock对象并将其锁定,那么如何阻止两个线程在lock和unlock之间运行代码块?这两个线程不会分别创建一个ReentrantLock对象并锁定它吗?我可以想象,如果lock对象是一个只实例化一次且从未更改的实例变量,这将如何工作。(最好是最终版) 我是不是误解了什么 我已经问过了,没有得到明确的答案 您每次都在方法本身中创建一个“ReentrantLock”是对的,以便同步该锁

以上是OCP7JavaSE书籍中的屏幕打印。第791页

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

我是不是误解了什么


我已经问过了,没有得到明确的答案

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

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

使用以下示例:

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

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

初学者可能会误解这一点。你可能注意到,在我之前的问题中没有人指出这一点