在Java中阻塞队列有什么好处?

我正在开发一个项目,该项目使用一个队列来保存有关需要发送到远程主机的消息的信息。 在这种情况下,一个线程负责将信息放入队列,另一个线程负责从队列中获取信息并发送它。 第二个线程需要定期检查队列中的信息。

但后来我发现这是轮子的重新发明:)我可以使用阻塞队列来达到这个目的。

在上述应用程序中使用阻塞队列有哪些其他优点? (例如:性能,代码可修改,任何特殊技巧等)

主要优点是BlockingQueue提供了正确的,线程安全的实现。 开发人员已经多年自己实现了这一function,但要做到这一点很棘手。 现在,运行时具有由并发专家开发,审查和维护的实现。

队列的“阻塞”性质有几个优点。 首先,在添加元素时,如果队列容量有限,则内存消耗也会受到限制。 此外,如果队列消费者远远落后于生产者,那么生产者自然会被限制,因为他们必须等待添加元素。 从队列中获取元素时,主要优点是简单; 永远等待是微不足道的,正确等待指定的超时只是稍微复杂一点。

阻塞队列是一个队列,当您尝试从队列中出队并且队列为空时阻塞,或者如果您尝试将项目排入队列且队列已满。 尝试从空队列中出队的线程被阻塞,直到某个其他线程将项目插入队列。 尝试将完整队列中的项排入队列的线程将被阻塞,直到某个其他线程在队列中创建空间,方法是将一个或多个项目出列或完全清除队列。

你用阻塞队列消除的关键是“轮询”。 这就是你说的地方

在这种情况下,第二个线程需要定期检查队列中的信息。

这可能是非常低效的 – 使用大量不必要的CPU时间。 它还可能引入不需要的延迟。

本文对此进行了很好的讨论。