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