条件 - 应该在等待之前解锁?

Hen*_*iek 11 java concurrency multithreading

你可以告诉我是否应该在等待条件之前释放锁定?

try {
    lock.lock();
    while (isNotEmpty()) {
        condition.await();
    }
} finally {
    lock.unlock();
}
Run Code Online (Sandbox Code Playgroud)

要么

try {
    lock.lock();
    while (isNotEmpty()) {
        lock.unlock();
        condition.await();
    }
} finally {
    lock.unlock();
}
Run Code Online (Sandbox Code Playgroud)

Tud*_*dor 27

不,您不需要在调用之前显式释放锁await,await将自动释放它.来自javadoc:

与此条件关联的锁被原子释放,并且当前线程因线程调度而被禁用[...]

和:

Condition当调用此方法时,假定当前线程保持与此关联的锁.