繁体   English   中英

为什么 ArrayBlockingQueue 必须绑定,而 LinkedBlockingQueue 没有?

[英]Why ArrayBlockingQueue must have bound, while LinkedBlockingQueue not?

当我实例化ArrayBlockingQueue ,我还必须在其构造函数中放入int 容量 同样的事情不适用于LinkedBlockingQueue 我感兴趣的是为什么会这样?

当然,我也可以将 bound 放在LinkedBlockingQueue ,但它是最佳的。 为什么它在这里是最佳的,而不是在ArrayBlockingQueue ArrayBlockingQueue不能像ArrayList具有默认的初始容量吗?

ArrayBlockingQueue的文档说。

这是一个经典的“有界缓冲区”,其中一个固定大小的数组保存由生产者插入并由消费者提取的元素。 容量一旦创建,就无法更改。 尝试将元素放入已满队列将导致操作阻塞; 尝试从空队列中获取元素也会类似地阻塞。

由于容量是固定的并且不能改变,所以由类的用户决定队列何时开始阻塞。

LinkedBlockQueue的文档说

基于链接节点的可选有界阻塞队列。 该队列对元素 FIFO(先进先出)进行排序。 队列的头部是在队列中停留时间最长的那个元素。 队列的尾部是在队列中停留时间最短的那个元素。 新元素插入队列尾部,队列检索操作获取队列头部元素。 链接队列通常比基于数组的队列具有更高的吞吐量,但在大多数并发应用程序中的可预测性能较差。

可选的容量绑定构造函数参数是一种防止队列过度扩展的方法。 如果未指定,容量等于 Integer.MAX_VALUE。 链接节点在每次插入时动态创建,除非这会使队列超出容量。

在这种情况下,将根据提供的容量进行阻止。 如果指定,则该阻塞容量的强制执行与ArrayBlockingQueue相同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM