PriorityBlockingQueue:它真的是阻塞的

时间:2014-03-02 16:06:00

标签: java multithreading collections concurrency blocking

我读到了PriorityBlockingQueue,似乎我对它有些妄想。你可以在下面看到四个陈述。我希望如果你不同意他们,你会纠正我。

  1. 如果线程无法对集合执行操作,则阻止集合会阻塞线程。 (当线程可以继续时阻止直到条件)。主要目的 - 生产者 - 消费者计划。
  2. 非阻塞集合不会阻塞线程,线程会继续执行。主要目的 - 读者不应等待作家的计划。我的意思是写入后延迟读操作延迟不显着的方案。
  3. 因为它来自PriorityBlockingQueue的名称 - 它是一个阻止集合。
  4. PriorityBlockingQueue提供pollremoveput等非阻止方法;并且似乎只有poll(long timeout, TimeUnit unit)take方法被阻止。
  5. 结论:从第四个声明中我得出结论,PriorityBlockingQueue 既可以用作阻止队列也可以用作非阻塞队列

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

1 个答案:

答案 0 :(得分:2)

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

来自BlockingQueue界面的javadoc:

  

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

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