有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么JavaAPI不为我们提供用于当前环境的有界队列实现?

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

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有界构造函数,但我不想让它的同步化。对于这种情况,什么可能是最好的解决方案?为什么我们没有提供一个有边界的“普通”队列


共 (1) 个答案

  1. # 1 楼答案

    JDK可能没有提供单线程有界队列实现,因为没有一个通用算法能够支持所有用例。例如,当队列已满时,您希望发生什么?传入元素应该被丢弃,是最后一个还是第一个

    根据您的需求实现您自己的应该是微不足道的