CopyOnWriteArrayList中add有锁了为什么要copy

news/2024/11/17 18:51:30/

CopyOnWriteArrayList中add有锁了为什么要copy

看之前一定要去看之前juc常用中看下volatile的作用

主要还是看写操作,下面是他的源码

    /*** Appends the specified element to the end of this list.** @param e element to be appended to this list* @return {@code true} (as specified by {@link Collection#add})*/public boolean add(E e) {synchronized (lock) {Object[] es = getArray();int len = es.length;es = Arrays.copyOf(es, len + 1);es[len] = e;setArray(es);return true;}}

疑问点::为什么加锁了还要进行copy操作
在这里插入图片描述

思考::
1、若没有复制,写时加锁,读时不加锁,那么就会发生并发读写问题,产生不可预期的异常,即上面说的 ConcurrentModificationException;
2、若没有复制,写时加锁,读时也需要加锁,这样就相当于退化为 SynchronizedList,读性能大大减弱。

解答::
在这里插入图片描述
先看上述代码中有volatile修饰
那你add了,将指向新的值,其他线程读取出来的也是最新的
由于读没有加锁,而volatile并不保证原子性,写的过程中的数据修改会被其他线程看到。

volatile:
可见性:当一个线程修改一个 volatile 变量的值时,这个新值将立即被写入主内存(Main Memory),并且对其他线程可见。当其他线程读取该 volatile 变量时,它们将会从主内存中读取最新的值,而不是使用线程的本地缓存。


http://www.ppmy.cn/news/89051.html

相关文章

【快应用】响应式布局适配横竖屏或折叠屏

【关键词】 响应式布局、折叠屏、横竖屏 【问题背景】 当前开发者在开发快应用时,往往将designWidth设置为设备屏幕的宽度,这时,应用的内容会随着设备宽度的变大而拉伸显示,导致在大屏、横屏、折叠屏展开时显示效果不好。 在折…

景区虚拟人智能互动导览提升客户服务体验

数字化浪潮下,文旅产正积极拥业数字化转型。虚拟数字人作为元宇宙的交互入口,其在文旅产业中的应用,对文旅产业的发展具有非常重要的意义。将超写实虚拟人化身为景点讲解员有哪些好处呢? 视觉冲击力更强,吸引眼球 超写实虚拟人的…

C语言函数大全-- x 开头的函数(2)

C语言函数大全 本篇介绍C语言函数大全-- x 开头的函数 1. xdr_char 1.1 函数说明 函数声明函数功能bool_t xdr_char(XDR *xdrs, char *cp);用于将一个 char 类型的数据编码为 XDR 流或从 XDR 流中解码出一个 char 类型的数据 参数: xdrs : 指向要编码…

1113 Integer Set Partition (PAT甲级)

这道题就有点莫名其妙的。 #include <cstdio> #include <vector> #include <algorithm>int main(){int N, gap, s1, s2;std::vector<int> vec;scanf("%d", &N);vec.resize(N);for(int i 0; i < N; i){scanf("%d", &v…

小程序开发-后端基础知识(下)

数据库操作的基础知识 数据库是存储和管理数据的电子系统。数据库一般以表格的形式存储数据&#xff0c;表格中的行代表具体的数据记录&#xff0c;列则表示数据的不同属性。当我们需要查询、修改、添加或删除数据时&#xff0c;我们需要使用数据库操作。下面我们就来了解一些…

计算机毕业论文选题推荐|软件工程|系列八

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)应用负载仿真计…

java 注解学习

Java 语言中存在三类注解&#xff0c;分别是元注解&#xff08;Meta-annotations&#xff09;、Java 内置注解&#xff08;Built-in Annotations&#xff09;和自定义注解&#xff08;Custom Annotations&#xff09;。 1、元注解&#xff08;Meta-annotations&#xff09; 元…

Git错误non-fast-forward的解决方法

1、问题描述 当要push代码到git时&#xff0c;出现提示&#xff1a; $ git push origin master To ../remote/ ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to ../remote/ 2、分析问题 Dealing with “non-fast-forward” …