Java PriorityBlockingQueue:它真的是阻塞吗

Java PriorityBlockingQueue:它真的是阻塞吗,java,multithreading,collections,concurrency,blocking,Java,Multithreading,Collections,Concurrency,Blocking,我读到PriorityBlockingQueue,似乎对此有一些错觉。你可以看到下面的四个陈述。我希望如果你不同意他们的意见,你能纠正我 如果线程无法对集合执行操作,则阻止集合将阻止该线程。阻塞直到线程可以继续时的状态。主要目的-生产者-消费者计划。 非阻塞集合不阻塞线程,线程继续执行。主要目的-读者不应等待作者的方案。我指的是写后的读操作延迟不显著的方案。 正如PriorityBlockingQueue的名称所示,它是一个阻塞集合。 PriorityBlockingQueue提供轮询、移除、放

我读到PriorityBlockingQueue,似乎对此有一些错觉。你可以看到下面的四个陈述。我希望如果你不同意他们的意见,你能纠正我

如果线程无法对集合执行操作,则阻止集合将阻止该线程。阻塞直到线程可以继续时的状态。主要目的-生产者-消费者计划。 非阻塞集合不阻塞线程,线程继续执行。主要目的-读者不应等待作者的方案。我指的是写后的读操作延迟不显著的方案。 正如PriorityBlockingQueue的名称所示,它是一个阻塞集合。 PriorityBlockingQueue提供轮询、移除、放置等非阻塞方法;似乎只有polllong超时、TimeUnit和take方法被阻塞。 结论:从第四条语句中,我得出结论,PriorityBlockingQueue既可以用作阻塞队列,也可以用作非阻塞队列


问题:我的结论正确吗?我能对所有其他阻塞集合说同样的话吗

你说得对。有时,对于某些操作不进行阻塞是很有用的,即使您经常出于阻塞目的使用它

从用于BlockingQueue接口的javadoc:

另外支持等待队列的操作的队列 在检索元素时变为非空,并等待释放空间 在存储元素时在队列中变为可用


因此,阻塞属性是对正常队列功能的补充。所以阻塞队列是一个队列,但队列不一定是阻塞队列。

编写一些代码来测试这一点,难道不比在SO上发布一个Q并等待别人给你答案更好吗?文档中是否有特定部分不清楚这些方法的作用?@BrianRoach我在自己测试了所有这些方法之后写下了这个问题。我只是想检查一下我是否理解所有这些,我可以对所有其他阻塞集合/映射的标准实现说同样的话。