来自该类的官方Java文档Condition
public void put(E x) throws InterruptedException {
lock.lock();
try {
while (count == items.length)
notFull.await();
items[putptr] = x;
if (++putptr == items.length)
putptr = 0;
++count;
notEmpty.signal();
} finally {
lock.unlock();
}
}
在while
循环中notFull.await()
的作用是什么?我没有看到这有什么作用。谁能提供一个简单的解释?
条件文档中解释了while
循环的原因:
等待条件时,允许"虚假唤醒" 一般来说,作为对底层平台的让步而发生 语义学。这对大多数应用程序几乎没有实际影响 程序作为条件应始终在循环中等待, 测试正在等待的状态谓词。一 免费实现以消除虚假唤醒的可能性但建议应用程序程序员始终假设 它们可能发生,因此始终循环等待。
假设有两个等待线程。两者都会收到通知。其中只有一个应该向前推进。另一个必须重新检查并等待。