技术文章 > java >  java基础 > 正文

java ConcurrentLinkedQueue元素获取操作

小妮浅浅

在我们对列表元素进行采集时,可以选择调用size的方法来实现。在获取的时候,需要我们注意的时,由于本身是非阻塞队列的方法,在没有锁的保护下,导致结果会出现一定的误差。下面我们就ConcurrentLinkedQueue类下的size方法进行说明、事项事项分析,然后带带获取队列元素的实例。

1.说明

返回此队列中的元素数量。如果此队列包含的元素数大于 Integer.MAX_VALUE,则返回 Integer.MAX_VALUE。

需要小心的是,与大多数 collection 不同,此方法不是一个固定时间操作。由于这些队列的异步特性,确定当前的元素数需要进行一次花费 O(n) 时间的遍历。

2.使用注意事项

使用单向链表来保存队列元素,内部使用非阻塞的CAS算法,没有加锁。size()方法用来获取当前队列的元素个数,但在并发环境中,其结果可能不精确,因为整个过程都没有加锁,所以从调用size方法到返回结果期间有可能增删元素,导致统计的元素个数不精确。

3.size实例

public int size() {
    int count = 0;
    for (Node<E> 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可以达到计算队列元素个数的目的,当然在结果上的误差是不能避免的,一般来说我们不常用这种方法,大家可以了解一下。

免费视频教程
本文原创发布python学习网,转载请注明出处,感谢您的尊重!
相关文章
 java ConcurrentLinkedQueue是什么
 ConcurrentLinkedQueue在java的原理探究
 java中ConcurrentLinkedQueue的入队
 ConcurrentLinkedQueue在java出队分析
 java ConcurrentLinkedQueue的用法整理
相关视频章节
 网络爬虫
 云端部署Web应用程序视频
 Web应用框架Flask和文件模板
 Web应用程序开发概述
 继承和多态
作者信息
推荐视频
视频教程分类