为什么等待条件在一段时间循环中?



来自该类的官方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循环的原因:

等待条件时,允许"虚假唤醒" 一般来说,作为对底层平台的让步而发生 语义学。这对大多数应用程序几乎没有实际影响 程序作为条件应始终在循环中等待, 测试正在等待的状态谓词。一 免费实现以消除虚假唤醒的可能性但建议应用程序程序员始终假设 它们可能发生,因此始终循环等待

假设有两个等待线程。两者都会收到通知。其中只有一个应该向前推进。另一个必须重新检查并等待。

最新更新