本教程操作环境:windows7系统、java10版,DELL G3电脑。
1.说明
返回此队列中的元素数量。如果此队列包含的元素数大于 Integer.MAX_VALUE,则返回 Integer.MAX_VALUE。
需要小心的是,与大多数 collection 不同,此方法不是一个固定时间操作。由于这些队列的异步特性,确定当前的元素数需要进行一次花费 O(n) 时间的遍历。
2.使用注意事项
使用单向链表来保存队列元素,内部使用非阻塞的CAS算法,没有加锁。size()方法用来获取当前队列的元素个数,但在并发环境中,其结果可能不精确,因为整个过程都没有加锁,所以从调用size方法到返回结果期间有可能增删元素,导致统计的元素个数不精确。
3.size实例
public int size() {
int count = 0;
for (Node p = first(); p != null; p = succ(p))
if (p.item != null)
// Collection.size() spec says to max out
if (++count == Integer.MAX_VALUE)
break;
return count;
} CAS 没有加锁,所以 size 是不准确的。并且 size 会遍历一遍列表,比较耗费性能。
以上就是java中ConcurrentlinkedQueue元素获取的操作方法,使用size可以达到计算队列元素个数的目的,当然在结果上的误差是不能避免的,一般来说我们不常用这种方法,大家可以了解一下。



