gpt4 book ai didi

java - 关于 LinkedBlockingQueue,需要澄清

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:59 25 4
gpt4 key购买 nike

考虑以下代码片段。 qIn 是一个 BlockingQueueLinkedBlockingQueue 实现

    while (true) {
try {
// retrieved = qIn.poll(999, TimeUnit.MILLISECONDS); works
retrieved = qIn.poll(); // fails

if (retrieved != null)
consume(retrieved);

if (!Producer.isAddingData && qIn.size() == 0)
break;

} catch (InterruptedException e) {
e.printStackTrace();
}
}

让我澄清一下有效失败的含义。当我说 qIn.poll() 失败时,我指的是有时并非队列中的所有数据都被处理。

为什么需要等待(qIn.poll(999, TimeUnit.MILLISECONDS) 是必要的

retrieved = qIn.poll(999, TimeUnit.MILLISECONDS); // works
retrieved = qIn.poll(); // fails

什么时候总是执行以下检查?基本上检查是“如果您的生产者不再添加数据并且要从中提取数据的队列不包含数据,则中断

if (!StopwordsFilter.isAddingData && qIn.size() == 0)
break;

我想知道,在什么情况下qIn.poll();会失败?

定义如下,考虑到我们只有在没有东西可拿的时候才会中断,为什么会中断呢?

retrieves and removes the head of this queue, or returns null if this queue is empty.

PS:我应该补充一点,qIn.poll() 有时会失败,但并非总是失败

最佳答案

poll() 可以返回 null 因为信息尚未添加到队列中,这就是原因 - 但也许它可能会在几毫秒内添加。 poll() 根本不做任何等待。

如果您想等待...那么您将需要猜测等待时间的上限。没有真正好的方法来预测这一点,但你可能可以慷慨 - 如果我正确理解情况,你通常会很快地将东西添加到队列中。

关于java - 关于 LinkedBlockingQueue,需要澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9169681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com