2014-03-02 47 views
-1

我读了约PriorityBlockingQueue,似乎我有一些妄想。您可以在下面看到四条陈述。我希望如果你不同意他们,你会纠正我。PriorityBlockingQueue:是否真的阻止

  1. 如果线程无法对集合执行操作,则阻塞集合会阻塞线程。 (阻塞直到线程可以继续的条件)。主要目的 - 生产者 - 消费者计划。
  2. 非阻塞集合不会阻塞线程,并且线程继续执行。主要目的 - 读者不应该等待作家的计划。我的意思是写入后的延迟读取延迟时间不明显的方案。
  3. 从名称PriorityBlockingQueue开始 - 这是一个阻止集合。
  4. PriorityBlockingQueue提供诸如poll,remove, put等的非阻塞方法;似乎只有poll(long timeout, TimeUnit unit)take方法阻塞。

结论:从第四语句我断定PriorityBlockingQueue可以既用作阻塞和非阻塞队列

问题:我的结论是否正确?我可以对所有其他阻止集合进行相同的说明吗?

+0

不会编写一些代码来测试这个比在这个SO上发布Q并且等待某人给你答案更好吗?文档中有哪些部分不清楚这些方法的用途? –

+0

@BrianRoach我在自己测试了所有这些方法之后编写了这个问题。我只想检查我是否理解所有正确的 –

回答

2

你是对的。有时候,不要阻止某些操作,即使您经常使用阻止目的也是有用的。

根据JavaDoc为BlockingQueue接口:

队列支持两个附加等待队列 检索一个元素时变为非空,并等待空间 在变得可用的操作队列存储元素时。

所以阻塞属性是普通队列功能的一个补充。所以阻塞队列是一个队列,但是队列不一定是阻塞队列。

+0

我是否可以对阻塞集合/地图的所有其他标准实现说同样的话。 –

+0

看到我的编辑,答案是肯定的。 – Kayaman