使用带有DataFolder.Release.config
的{{1}}时,例如
Lock
和锁定,即
Condition
然后虽然不能继续,例如,
ReentrantLock lock = new ReentrantLock();
Condition condition = lock.newCondition();
我们lock.lock();
try {
while (!ok_to_continue) {
:
await
然后,通常,在我们完成线程不安全业务之后,使用{{1}发出任何或所有condition
线程的信号{}}块中的{}或 condition.await();
}
,即
await
确保解锁之前,即:
signal
通常 我的意思是:按照编程教师的建议,Java书籍 [1] 和Oracle [2] < / sup>在signalAll
块中调用try
和condition.signalAll();
方法。根据Oracle的文档,这些方法通常在当前线程持有相应的} finally {
lock.unlock();
}
时调用。这是否意味着signal
和signalAll
方法也可以在try
块中而不是之前调用?为什么典型从Lock
块中发出signal
线程信号,线程不安全业务可能会抛出异常?换句话说,我们无法确定是否会调用signalAll
或finally
方法,我是否正确?那么为什么通过在await
块中调用它们来确保 被调用是不常见的?那就是:
try
通过在signal
块中调用其中一个,我们确保激活signalAll
线程并防止死锁。
这两种构造的用途是什么?为什么Oracle会使用finally
块中的条件而不是} finally {
condition.signalAll();
lock.unlock();
}
块中的条件?