You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PriorityBlockingQueue默认初始容量11为何remainingCapacity返回Integer.MAX_VALUE且添加元素后不变

问题原因解析

首先明确两个核心逻辑:

  • PriorityBlockingQueue 是无界阻塞队列,默认初始容量11仅代表底层存储数组的初始化大小,并不是队列的最大容量上限。当存储的元素数量超过当前数组长度时,队列会自动触发数组扩容,只要JVM内存足够,理论上可以无限添加元素,不存在固定的容量上限。
  • remainingCapacity() 是BlockingQueue接口定义的方法,作用是返回队列可以无阻塞接收的剩余元素数量。对于无界队列而言,不存在固定的容量上限,因此JDK对该方法的实现直接固定返回Integer.MAX_VALUE,这是无界队列的标准实现约定。

为什么添加元素后返回值不变

你可以直接查看JDK中PriorityBlockingQueue的remainingCapacity()方法源码,实现逻辑就是写死返回固定值:

public int remainingCapacity() {
    return Integer.MAX_VALUE;
}

这个方法完全没有计算当前队列元素数量、底层数组剩余空间的逻辑,所以不管你往队列里添加多少元素、底层数组有没有触发扩容,这个方法的返回值永远都是Integer.MAX_VALUE,不会发生变化。


补充说明:只有有界阻塞队列(比如ArrayBlockingQueue)的remainingCapacity()方法才会实时计算剩余可用容量,所有无界队列的该方法都固定返回Integer.MAX_VALUE。

内容的提问来源于stack exchange,提问作者Kuldeep Shrivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:27:02