来自官方Java Documentation of the class 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();
}
}
在notFull.await()
循环中使用while
有什么作用?我没有看到这是怎么回事。谁能提供简单的解释?
答案 0 :(得分:2)
Condition文档中说明了while
循环的原因:
在等待条件时,允许“虚假唤醒”以 通常作为基础平台的让步而发生 语义。这对大多数应用程序几乎没有实际影响 作为条件的程序应始终在循环中等待, 测试正在等待的状态谓词。一个 实施是免费的,消除了虚假唤醒的可能性 ,但建议应用程序程序员始终假定 它们可能会发生,因此总是循环等待。。
答案 1 :(得分:1)
假设有两个等待线程。两者都得到通知。他们中只有一个应该前进。另一个必须重新检查并等待。