如何为 LinkedTransferQueue 提供容量?

How to provide capacity for a LinkedTransferQueue?

目前我正在阅读 java 中的合集。正如我所读,LinkedTransferQueueLinkedBlockingQueue 的超集,其 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