以上是来自OCP 7 java se book的屏幕打印。第791页。
我的问题是,如果每次在方法中创建一个新的ReentrantLock
对象并锁定,那么如何阻止两个线程在lock
和unlock
之间运行代码块?两个线程不会分别创建一个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()
}
}
}