BlockingQueue 上是否有最大阻塞时间?

4
在生产者-消费者问题中,我想使用LinkedBlockingQueue作为共享缓冲区。
生产者线程使用put()方法将元素放在队列上,消费者线程使用take()方法消耗队列上的元素。
我的问题是:假设队列为空并且消费者线程调用take()方法,我知道该线程会一直阻塞,直到生产者将元素放入队列。但是否存在最大阻塞持续时间?我能否安全地假定消费者线程将一直阻塞,直到put()调用?
我听说有人说永远没有像阻塞那样的东西。这是真的吗?
2个回答

5
没有take()方法的等待超时时间。文档也没有提到任何超时时间:

检索并删除此队列的头,必要时等待直到有元素可用

另一方面,poll方法可以接受超时时间作为参数。

1
如果您查看 LinkedBlockingQueue take() 方法的实现,它会在一个循环中等待 notEmpty 条件,只有当计数变为非零时才会退出循环。
因此,是的,它将永远等待,直到条件得到满足,也就是有人将元素放入其中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接