Java中的CopyOnWriteArrayList

介绍:

Java中的CopyOnWriteArrayListList接口的线程安全实现。 它属于java.util.concurrent包,是ArrayList实现的增强版本。

顾名思义, CopyOnWriteArrayList为每个add()set()操作创建基础ArrayList的克隆内部副本。 由于这种额外的开销成本,理想情况下,仅当我们具有非常频繁的读取操作且插入或更新次数不多时,才应使用CopyOnWriteArrayList

构造一个

我们可以使用以下构造函数之一来创建CopyOnWriteArrayList

  • CopyOnWriteArrayList():创建一个空列表
  • CopyOnWriteArrayList(Collection c):创建一个用c中所有元素初始化的列表
  • CopyOnWriteArrayList(Object [] obj):创建一个列表,其中包含给定数组obj的副本

让我们看几个例子:

Java

CopyOnWriteArrayList<String> emptyList = new CopyOnWriteArrayList<>(); //[]list.add("A");CopyOnWriteArrayList<String> listUsingCollection =new CopyOnWriteArrayList<>(list); //["A"]CopyOnWriteArrayList<String> listUsingArr = new CopyOnWriteArrayList<>(new String[] {"A", "B"}); //["A", "B"]

就像ArrayList一样 ,它为List接口的所有方法提供实现。 我们可以在此处阅读有关ArrayList的更多信息。

众所周知, ArrayList的迭代器是快速失败的,即一旦实例化迭代器,当它在列表中检测到任何修改时,它将抛出ConcurrentModificationException

CopyOnWriteArrayList具有故障保护迭代器,即使在迭代过程中修改列表时也不会引发异常。 这是因为迭代器正在原始列表的克隆内部副本上进行操作。

但是,以后对列表所做的任何修改对于已实例化的迭代器都是不可见的。

让我们尝试一下

假设我们有一个CopyOnWriteArrayList实例,该实例当前包含两个元素:

Java

CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>(new String[] {"A", "B"});

现在,让我们获得一个Iterator实例,以便能够对其元素进行迭代:

Java

Iterator itr = list.iterator();

创建Iterator实例之后,现在让我们向列表中再添加一个元素:

Java

list.add("C"); //doesn't throw an exception

现在,让我们使用之前创建的itr遍历列表中的元素:

Java

while(itr.hasNext()) {System.out.print(itr.next() + " ");
}

上面的代码将打印:

A
B

正如预期的那样,ITR不能反映表的当前状态,并只打印“A”和“B”为元素。 但是,如果我们创建迭代器的新实例,则它将代表列表的确切当前状态。

CopyOnWriteArrayList的 Iterator不支持remove()操作。 任何尝试这样做都会导致UnsupportedOperationException:

Java

@Test(expected = UnsupportedOperationException.class)
public void iterationAndRemoval() {CopyOnWriteArrayList<String> list= new CopyOnWriteArrayList<>(new String[]{"A", "B"});Iterator<String> itr = list.iterator();while (itr.hasNext()) {itr.remove();}
}

让我们回顾一下Java ArrayListCopyOnWriteArrayList类之间的区别:

数组列表 CopyOnWriteArrayList
属于java.util包,并且不是线程安全的 是线程安全的实现,并存在于java.util.concurrent包中
具有快速失败的迭代器,一旦迭代开始,它会在检测到任何修改时引发ConcurrentModificationException 有一个故障保护迭代器,因为该迭代器保存列表的克隆副本
迭代器支持remove()操作 它的迭代器不支持remove(),并且任何尝试都抛出UnsupportedOperationException。

结论:

在本教程中,我们了解了Java List的线程安全实现– CopyOnWriteArrayList 。 我们还介绍了ArrayListCopyOnWriteArrayList之间的区别。

成为第一个发表评论的人。

翻译自: https://www.javacodegeeks.com/2019/03/copyonwritearraylist-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[渝粤教育] 广东-国家-开放大学 10180k2_统计基础_21秋考试

1、次数分配数列是&#xff08;&#xff09;。&#xff08;2 分&#xff09; A&#xff0e;按数量标志分组形成的数列 B&#xff0e;按品质标志分组形成的数列 C&#xff0e;按统计指标分组所形成的数列 D&#xff0e;按数量标志和品质标志分组所形成的数列 2、下列指标中属于时…

POE交换机技术及优势介绍

PoE交换机就是支持对网线供电的交换机&#xff0c;和普通交换机相比就是受电终端&#xff08;比如AP、数字摄像头等&#xff09;不用再进行电源布线&#xff0c;对整个网络而言可靠性更高。今天&#xff0c;飞畅科技的小编在这里为大家详细介绍下POE交换机的技术及优势&#xf…

物联网的下一步动作会是什么?

​物联网发展最初的技术成熟度曲线只是基于已部署和潜在传感器的数量增加。如今&#xff0c;我们可以展望未来&#xff0c;探讨一些重要的成功因素。物联网的未来趋势包括物联网应用&#xff0c;会给最终客户带来经济效益。还有一个趋势是电池使用寿命更长&#xff0c;能持续数…

[渝粤教育] 广东-国家-开放大学 10259k2_经济学基础_21秋考试

单项选择题 1、基数效用是指&#xff08; &#xff09;&#xff08;2 分&#xff09; A&#xff0e;效用是可以计量并加总求和的 B&#xff0e;效用不可计量&#xff0c;也不能加总求和 C&#xff0e;效用是可以比较的 D&#xff0e;效用只能用序数来表示 2、下列哪种情况所对应…

无线网络拓扑结构简析

拓扑一词源自几何学&#xff0c;原意是指研究几何图形或空间在连续改变形状后还能保持不变的一些性质的一个学科。它只考虑物体间的位置关系而不考虑它们的形状和大小。而我们耳熟能详的网络拓扑&#xff0c;则描述的是网络中不同节点之间如何相互连接和通信。 现代网络由许多不…

织梦模板不支持html,html中{}是什么样的模板?如何使用它?HTML5template模板标签是什么?html常用的字体样式是什么?dede后台文件为什么不能生成html?...

html中{}是什么样的模板?如何使用它?HTML5template模板标签是什么?html常用的字体样式是什么?dede后台文件为什么不能生成html?我们经常遇到这些问题&#xff0c;下面就和小编一起来看看吧!html中{}是什么样的网站模板?如何使用它?你的这个html代码中嵌入了angular的表现…

[渝粤教育] 广东-国家-开放大学 21秋期末考试Java程序设计基础10232k2

1、下列关于线程状态转换的描述中&#xff0c;错误的是&#xff08; &#xff09;&#xff08;2 分&#xff09; A&#xff0e;死亡状态下的线程调用start()方法可以使其重新进入就绪状态 B&#xff0e;线程获得CPU使用权后会从就绪状态转换成运行状态 C&#xff0e;线程失去CP…

以太网交换机性能测试丢包的原因?

在工业以太网交换机性能测试过程中&#xff0c;我们经常会遇到非设备性能因素导致的丢包&#xff0c;对测试产生困扰。那么&#xff0c;以太网交换机性能测试丢包的原因有哪些呢&#xff1f;在这里杭州飞畅科技的小编简单罗列几种&#xff0c;一起来看看吧&#xff01; 1、测试…

ZigBee与智慧家居-ZigBee方案

看过电影《钢铁侠》的朋友应该对影片里面小唐尼的别墅“自由之城”不会陌生&#xff0c;不论是充满未来科技感的整体外观设计&#xff0c;还是以智能AI“贾维斯”为核心的智能系统&#xff0c;无不让人产生一种想要切身体会的冲动。其实&#xff0c;在万物互联的浪潮下&#xf…

[渝粤教育] 广东-国家-开放大学 21秋期末考试互联网金融(本)10575k1

单项选择题 1、网络保险能解除传统保险中客户与保险机构的时间、空间制约主要体现的方式是&#xff08; &#xff09; &#xff08;2 分&#xff09; A&#xff0e;一个网址 B&#xff0e;一对多 C&#xff0e;一对一 D&#xff0e;一个服务器 2、P2P网络借贷是&#xff08; &a…

slf4j 桥接与被桥接_合成和桥接方法

slf4j 桥接与被桥接如果您曾经玩过反射并执行了getDeclaredMethods()您可能会感到惊讶。 您可能会获得源代码中不存在的方法。 或者&#xff0c;也许您看了一些方法的修饰符&#xff0c;发现其中一些特殊方法是易变的。 顺便说一句&#xff1a;对于Java采访来说&#xff0c;这是…

隔离电源模块的5个作用

在工业控制设备中&#xff0c;有时候要求两个系统之间的电源地线隔离&#xff0c;如隔离地线噪声、隔离高共模电压等&#xff0c;采用带变压器的直流变换器&#xff0c;将两个电源之间隔开&#xff0c;使他们相互独立&#xff0c;从而实现以上目的&#xff01;每个隔离电源模块…

[渝粤教育] 广东-国家-开放大学 21秋期末考试基础会计10258k2

1、在登记账簿时&#xff0c;红色墨水不能用于&#xff08;&#xff09;。 &#xff08;2 分&#xff09; A&#xff0e;更正错账 B&#xff0e;记账 C&#xff0e;结账 D&#xff0e;冲账 2、下列凭证中属于自制原始凭证的是&#xff08;  &#xff09;。&#xff08;2 分&a…

html纵向滚动特效,带视觉差效果的垂直全屏整页滚动特效

这是一款效果非常炫酷的带视觉差效果的垂直全屏整页滚动特效。该特效使用jQuery和CSS3完成&#xff0c;用户可以通过滚动鼠标来一次垂直切换一个页面&#xff0c;在页面切换的时候还带有一些视觉差特效。使用方法HTML结构这个特效的HTML结构使用一个作为包裹容器。里面每一个是…

高清监控如何选择交换机

网络监控系统在我国的安防中占据了绝对的位置&#xff0c;在高清网络视频监控系统中&#xff0c;经常有客户反啊馈画面延时、卡顿等现象&#xff0c;造成这种现象的原因有很多&#xff0c;但大多数情况下还是交换机的配置不够合理&#xff0c;导致带宽不足造成的。交换机是整个…

CAN总线知识点概述

CAN全称为“ControllerAreaNetwork”&#xff0c;简称CAN&#xff0c;是国际上应用最广泛的现场总线之一。在当前的汽车产业中&#xff0c;出于对安全性、舒适性、方便性、低公害、低成本的要求&#xff0c;各种各样的电子控制系统被开发出来。出于这些系统之间通信所用的数据类…

[渝粤教育] 广东-国家-开放大学 21秋期末考试工程经济10202k2

1、某设备原始价值16,000元&#xff0c;残值为零&#xff0c;折旧年限为5年&#xff0c;用双倍余额递减法计算的第4年折旧额为&#xff08; &#xff09;元。&#xff08;2.5 分&#xff09; A&#xff0e;1,728 B&#xff0e;1,382.4 C&#xff0e;2,304 D&#xff0e;3,840 2…

使用Java从地图中删除元素

关于从Java中的Map删除元素的非常简短的文章。 我们将专注于删除多个元素&#xff0c;而忽略了您可以使用Map.remove删除单个元素的Map.remove 。 以下Map将用于此帖子&#xff1a; Map<Integer, String> map new HashMap<>(); map.put(1, "value 1")…

[渝粤教育] 广东-国家-开放大学 21秋期末考试建筑工程概预算10326k2

1、构造柱与墙体连接处的马牙槎&#xff0c;从每层柱脚开始&#xff0c;先退后进&#xff0c;沿墙高每&#xff08; &#xff09;设2φ6拉结钢筋。&#xff08;2 分&#xff09; A&#xff0e;700mm B&#xff0e;500mm C&#xff0e;400mm D&#xff0e;600mm 2、项目建设单位…

工业以太网交换机的产品性能有哪些呢?

工业以太网交换机的使用非常广泛&#xff0c;有智能交通、电子警察、平安城市、工厂自动化等&#xff0c;如何在恶劣的室外作业环境中保障数据的稳定传输&#xff0c;对网络和通讯设备提出了极高的适应性要求&#xff0c;那么&#xff0c;工业以太网交换机的产品性能有哪些呢&a…