为什么javaapi不为非并发环境提供有界队列实现?

9avjhtql  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(282)

我正在写一个小应用程序,我想有一个有界的队列。天真的做法是:

Queue<Integer> queue = new ArrayDeque<> (5);

问题是,我得到的是初始容量(调整大小),而不是最大容量。此构造函数的文档是:


* Constructs an empty array deque with an initial capacity

 * sufficient to hold the specified number of elements.

然后我做了一个 BlockingQueue 我知道这是“阻塞”并且适合我编码的工作:

BlockingQueue<Integer> queue = new ArrayBlockingQueue<> (5);

我知道这是可行的,因为现在我得到了一个有界的队列。此构造函数的文档:


* Creates an {@code ArrayBlockingQueue} with the given (fixed)

 * capacity and default access policy.

我以为工作结束了,但我记得阻塞队列实现是线程安全的。我的应用程序使用单线程。因此,我不想有一个“性能命中”。
现在我有点困了。我想用 BlockingQueue's 有界构造函数,但我不想让它同步。对于这种情况,最好的解决方案是什么?为什么我们没有提供一个有边界的“普通”队列?

qcbq4gxm

qcbq4gxm1#

jdk不提供单线程有界队列实现,可能是因为没有一个通用算法能够支持所有用例。例如,当队列已满时,您希望发生什么?传入的元素应该被丢弃,是最后一个还是第一个?
根据自己的需要实现自己的目标应该是微不足道的。

相关问题