Java 为什么ArrayBlockingQueue必须绑定,而LinkedBlockingQueue不能绑定?

Java 为什么ArrayBlockingQueue必须绑定,而LinkedBlockingQueue不能绑定?,java,queue,blockingqueue,Java,Queue,Blockingqueue,当我实例化ArrayBlockingQueue时,我还必须将int capacity放入其构造函数中。同样的事情不适用于LinkedBlockingQueue。我感兴趣的是为什么会这样 当然,我也可以将bound放入LinkedBlockingQueue,但它是最优的。为什么它在这里是最优的,而不是在ArrayBlockingQueue中?ArrayBlockingQueue不能像ArrayListhas那样具有默认的初始容量吗?的文档说明 这是一个经典的“有界缓冲区”,其中一个固定大小的数组保

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

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

的文档说明

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

由于容量是固定的,不能更改,因此由类的用户决定队列何时开始阻塞

该文件的内容如下:

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

可选的capacity-bound构造函数参数用于防止队列过度扩展。如果未指定,则容量等于Integer.MAX\u值。链接节点在每次插入时动态创建,除非这会使队列超出容量

在这种情况下,将根据提供的容量来阻塞数据。如果指定,则该阻塞容量的实施方式与say的文档中的
ArrayBlockingQueue

相同

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

由于容量是固定的,不能更改,因此由类的用户决定队列何时开始阻塞

该文件的内容如下:

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

可选的capacity-bound构造函数参数用于防止队列过度扩展。如果未指定,则容量等于Integer.MAX\u值。链接节点在每次插入时动态创建,除非这会使队列超出容量


在这种情况下,将根据提供的容量来阻塞数据。如果指定,则阻塞容量的强制方式与
ArrayBlockingQueue

相同。无论如何,我已经阅读了文档,谢谢。但这并没有真正回答我的问题。我想知道为什么链接容量是最优的,而阵列不是。我想你是说
可选的
(或者可能不是)。无论如何,这是因为它是一个可选的有界队列。这只是类的一个特性,它不同于
ArrayBlockingQueue
。你的问题还问到为什么不能像
ArrayList
那样做。正如我所解释的,
ArrayBlockingQueue
容量是固定的,而
ArrayList
并不是因为
ArrayList
不阻塞。是的,我明白:)我理解它们是如何实现的,但为什么不采用相同的实现(例如,使两者都达到最佳或不达到最佳)。然后决定是使用数组还是linkedList结构。这只是猜测,但可能是因为linkedList会自动增长,不需要保留空间。linkedList的最大容量(顺便说一句,它可能永远不会达到)是
Integer.max\u VALUE
。要在ArrayBlockingQueue中执行同样的操作,数组必须非常大。如果它必须像arrayList一样不断地复制并更新自身,那么性能就会受到影响。要确切知道,你可以给Doug Lea发电子邮件询问他。这两门课都是他写的。谢谢,伙计,谢谢。我已经读过了,谢谢。但这并没有真正回答我的问题。我想知道为什么链接容量是最优的,而阵列不是。我想你是说
可选的
(或者可能不是)。无论如何,这是因为它是一个可选的有界队列。这只是类的一个特性,它不同于
ArrayBlockingQueue
。你的问题还问到为什么不能像
ArrayList
那样做。正如我所解释的,
ArrayBlockingQueue
容量是固定的,而
ArrayList
并不是因为
ArrayList
不阻塞。是的,我明白:)我理解它们是如何实现的,但为什么不采用相同的实现(例如,使两者都达到最佳或不达到最佳)。然后决定是使用数组还是linkedList结构。这只是猜测,但可能是因为linkedList会自动增长,不需要保留空间。链路的最大容量