Java PriorityBlockingQueue 阻塞行为

问题描述 投票:0回答:1

从我看到的文档中,

take()
方法会阻塞,直到元素变得可用为止。
还有其他情况可能会阻塞吗?

我的意思是,是否有一种可能的情况,当队列空时,但尽管如此,调用

take()
由于某种原因会阻塞。

请告诉我,是否有人了解此类场景。

java priority-queue blockingqueue
1个回答
0
投票

还有其他情况可能会阻塞吗?

不。通过我阅读代码(Java 11版本)

take()
,只有在调用时队列为空时才会阻塞。

但这并不意味着当队列变为非空时,

take()
调用将立即解除阻塞。事实上,如果两个或多个线程同时调用
take()
,可以想象,某些线程将“挨饿”,因为到达的元素始终被传递给其他等待线程。 (
PriorityBlockingQueue
使用
ReentrantLock
实例来协调生产者和消费者,但它们不是作为公平锁创建的。)

© www.soinside.com 2019 - 2024. All rights reserved.