在方法的本地范围内创建的 ReentrantLock 对象将如何工作?
How will ReentrantLock object created inside a method's local scope work?
以上是 OCP 7 java se 书中的屏幕截图。第 791 页。
我的问题是,如果每次都在一个方法中创建一个新的 ReentrantLock
对象并锁定,那么如何从 运行 lock
和 lock
之间的代码块中停止两个线程unlock
?两个线程不会各自创建一个ReentrantLock
对象并锁定吗?我可以想象如果 lock
对象是一个只实例化一次并且永远不会改变的实例变量,这将如何工作。 (最好是 final
)。
我是不是误会了什么?
我已经问过 但没有得到明确的答复。
你每次都在方法本身中创建一个 'ReentrantLock' 是正确的,以便同步该锁上的线程是行不通的。必须有一个 "shared" 锁定对象。
书中的例子可能过于简单了。
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()
}
}
}
以上是 OCP 7 java se 书中的屏幕截图。第 791 页。
我的问题是,如果每次都在一个方法中创建一个新的 ReentrantLock
对象并锁定,那么如何从 运行 lock
和 lock
之间的代码块中停止两个线程unlock
?两个线程不会各自创建一个ReentrantLock
对象并锁定吗?我可以想象如果 lock
对象是一个只实例化一次并且永远不会改变的实例变量,这将如何工作。 (最好是 final
)。
我是不是误会了什么?
我已经问过
你每次都在方法本身中创建一个 'ReentrantLock' 是正确的,以便同步该锁上的线程是行不通的。必须有一个 "shared" 锁定对象。
书中的例子可能过于简单了。
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()
}
}
}