如何为 LinkedTransferQueue 提供容量?
How to provide capacity for a LinkedTransferQueue?
目前我正在阅读 java 中的合集。正如我所读,LinkedTransferQueue
是 LinkedBlockingQueue
的超集,其 put(E e)
方法插入和对象和 returns 无效,如果需要,将阻塞直到队列中的 space 变为可用的。但是我没有看到 LinkedTransferQueue
的任何构造函数接受按大小限制它的能力。
那么在 LinkedBlockingQueue 上调用 put
方法将如何以及何时将认为它已满而阻塞,因为我们没有在任何地方为其指定有界大小。
我遇到了以下我没有得到的代码行。
TransferQueue<Integer> tq = new LinkedTransferQueue<>(); // not bounded.
tq.put(2); // blocks if bounded and full
第 2 行的注释是什么意思。
谢谢。
即使 LinkedTransferQueue
不能限制容量,接口 TransferQueue
允许限制实现。
Like other blocking queues, a TransferQueue may be capacity bounded.
目前唯一的实现是unbounded LinkedTransferQueue
,所以这只是一个措辞问题。 IE。 TransferQueue
不保证 是无界的。
/**
* Creates a {@code LinkedBlockingQueue} with the given (fixed) capacity.
*
* @param capacity the capacity of this queue
* @throws IllegalArgumentException if {@code capacity} is not greater
* than zero
*/
public LinkedBlockingQueue(int capacity) {
if (capacity <= 0) throw new IllegalArgumentException();
this.capacity = capacity;
last = head = new Node<E>(null);
}
这是LinkedBlockingQueue
构造函数代码,它接收一个参数来设置容量。
/**
* Always returns {@code Integer.MAX_VALUE} because a
* {@code LinkedTransferQueue} is not capacity constrained.
*
* @return {@code Integer.MAX_VALUE} (as specified by
* {@link java.util.concurrent.BlockingQueue#remainingCapacity()
* BlockingQueue.remainingCapacity})
*/
public int remainingCapacity() {
return Integer.MAX_VALUE;
}
这是LinkedTransferQueue
class代码,它的容量总是等于Integer.MAX_VALUE
。
目前我正在阅读 java 中的合集。正如我所读,LinkedTransferQueue
是 LinkedBlockingQueue
的超集,其 put(E e)
方法插入和对象和 returns 无效,如果需要,将阻塞直到队列中的 space 变为可用的。但是我没有看到 LinkedTransferQueue
的任何构造函数接受按大小限制它的能力。
那么在 LinkedBlockingQueue 上调用 put
方法将如何以及何时将认为它已满而阻塞,因为我们没有在任何地方为其指定有界大小。
我遇到了以下我没有得到的代码行。
TransferQueue<Integer> tq = new LinkedTransferQueue<>(); // not bounded.
tq.put(2); // blocks if bounded and full
第 2 行的注释是什么意思。
谢谢。
即使 LinkedTransferQueue
不能限制容量,接口 TransferQueue
允许限制实现。
Like other blocking queues, a TransferQueue may be capacity bounded.
目前唯一的实现是unbounded LinkedTransferQueue
,所以这只是一个措辞问题。 IE。 TransferQueue
不保证 是无界的。
/**
* Creates a {@code LinkedBlockingQueue} with the given (fixed) capacity.
*
* @param capacity the capacity of this queue
* @throws IllegalArgumentException if {@code capacity} is not greater
* than zero
*/
public LinkedBlockingQueue(int capacity) {
if (capacity <= 0) throw new IllegalArgumentException();
this.capacity = capacity;
last = head = new Node<E>(null);
}
这是LinkedBlockingQueue
构造函数代码,它接收一个参数来设置容量。
/**
* Always returns {@code Integer.MAX_VALUE} because a
* {@code LinkedTransferQueue} is not capacity constrained.
*
* @return {@code Integer.MAX_VALUE} (as specified by
* {@link java.util.concurrent.BlockingQueue#remainingCapacity()
* BlockingQueue.remainingCapacity})
*/
public int remainingCapacity() {
return Integer.MAX_VALUE;
}
这是LinkedTransferQueue
class代码,它的容量总是等于Integer.MAX_VALUE
。