ArrayBlockingQueue 不是 JDK 中唯一一个保持其内部容量的队列。接口 java.util.concurrent。BlockingQueue(它是 java.util.Queue 的子接口)具有方法remainingCapacity ()。所有 BlockingQueue 实现都必须实现 remainingCapacity()。
其中一些实现不想使用容量限制。他们只是带着整数返回。MAX_VALUE。他们是:
java.util.concurrent.ScheduledThreadPoolExecutor.DelayedWorkQueue.remainingCapacity() java.util.concurrent.DelayQueue.remainingCapacity()
java.util.concurrent.PriorityBlockingQueue.remainingCapacity()
java.util.concurrent.LinkedTransferQueue.remainingCapacity()
有一个特殊的,因为它只有 0 容量:
java.util.concurrent.SynchronousQueue.remainingCapacity()
并且容量限制实现正在使用像容量计数器这样的实现逻辑:
java.util.concurrent.ArrayBlockingQueue.remainingCapacity()
java.util.concurrent.LinkedBlockingQueue.remainingCapacity()
java.util.concurrent.LinkedBlockingDeque.remainingCapacity()
容量限制队列实现正在阻止那些希望将内部计数增加到内部容量之上的方法。