以上是 OCP 7 java se 书中的屏幕截图。第 791 页。
我的问题是,如果每次都在方法中创建一个新的 ReentrantLock
对象并锁定,那么如何阻止两个线程运行 lock
和解锁
?两个线程不会各自创建一个ReentrantLock对象并锁定它吗?我可以想象如果 lock
对象是一个仅实例化一次且从未更改的实例变量,这将如何工作。 (最好是final
)。
我是不是误解了什么?
我已经问过this并没有得到明确的答复。
最佳答案
您每次都在方法本身中创建“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()
}
}
}
关于java - 在方法的本地范围内创建的 ReentrantLock 对象将如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55294843/