为什么 Java API 没有为我们提供非并发环境的有界队列实现?
Why Java API doesn't provide us with bounded Queue implementations for non-concurrent environment?
我正在编写一个小应用程序,我想要一个有界队列。天真的方法是这样做:
Queue<Integer> queue = new ArrayDeque<> (5);
问题是我得到的是 初始容量 (调整大小),而不是 最大容量 。此构造函数的文档是:
* Constructs an empty array deque with an initial capacity
* sufficient to hold the specified number of elements.
然后我做了一个 BlockingQueue
,我知道它是 'blocking' 并且适合我编码的工作:
BlockingQueue<Integer> queue = new ArrayBlockingQueue<> (5);
我知道这会起作用,因为现在我得到一个 有界 队列。此构造函数的文档:
* Creates an {@code ArrayBlockingQueue} with the given (fixed)
* capacity and default access policy.
我以为工作结束了,没想到BlockingQueue implementations are thread-safe。而我的应用程序使用 单线程 。因此,我不想受到“性能影响”。
现在我有点卡住了。我想使用 BlockingQueue's
有界构造函数 ,但我不想让它的 同步淹没 。这种情况的最佳解决方案可能是什么?为什么我们没有提供有边界的“普通”队列?
JDK 未提供单线程有界队列实现,可能是因为没有能够支持所有用例的通用算法。例如,当队列已满时,您希望发生什么?应该丢弃传入的元素,最后一个还是第一个?
根据您的需要实施您自己的应该是微不足道的。
我正在编写一个小应用程序,我想要一个有界队列。天真的方法是这样做:
Queue<Integer> queue = new ArrayDeque<> (5);
问题是我得到的是 初始容量 (调整大小),而不是 最大容量 。此构造函数的文档是:
* Constructs an empty array deque with an initial capacity * sufficient to hold the specified number of elements.
然后我做了一个 BlockingQueue
,我知道它是 'blocking' 并且适合我编码的工作:
BlockingQueue<Integer> queue = new ArrayBlockingQueue<> (5);
我知道这会起作用,因为现在我得到一个 有界 队列。此构造函数的文档:
* Creates an {@code ArrayBlockingQueue} with the given (fixed) * capacity and default access policy.
我以为工作结束了,没想到BlockingQueue implementations are thread-safe。而我的应用程序使用 单线程 。因此,我不想受到“性能影响”。
现在我有点卡住了。我想使用 BlockingQueue's
有界构造函数 ,但我不想让它的 同步淹没 。这种情况的最佳解决方案可能是什么?为什么我们没有提供有边界的“普通”队列?
JDK 未提供单线程有界队列实现,可能是因为没有能够支持所有用例的通用算法。例如,当队列已满时,您希望发生什么?应该丢弃传入的元素,最后一个还是第一个?
根据您的需要实施您自己的应该是微不足道的。