全部
技术
PHP
MySQL
前端
Linux
JAVA
工具
纪念日计算器
邮记星
个人记账
笔记侠
历史上的今天
生日密码
生日书
生日密码
生日花语
博古通今
三十六计
鬼谷子
笑林广记
本草纲目
山海经
唐诗宋词
宋词300首
唐诗300首
退出
登录
注册
编辑文章
选择分类
PHP
MySQL
前端
Linux
Java
工具
选择专栏
设计模式
java基础
Angular学习
Java面试题
描述:
封面图上传 :
+
点击上传图片
#### 使用arrayList时高并发情况报 java.util.concurrentmodficationException ##### 导致原因 并发争抢修改导致,一个人正在写,另一给过来抢夺,导致数据不一致 ##### 解决办法 1. arrayList换成Vector 2. 使用Collections.synchronizedList(new ArrayList<>()) 3. new CopyOnWriteArrayList() #### CopyOnWriteArrayList() 写时复制 CopyOnWrite容器即写时复制的容器。往一个容器添加元素的时候,不直接往当前容器Object[]添加,而是先将当前容器object[]进行copy,复制一个新的容器object[] newElements, 然后在新的容器 object[] newElements里面添加元素,添加完元素后,再将原容器的引用指向新的容器(setArray(newElements);这样做的好处是可以对copyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素,所以copyOnWrite也是一种读写分离的思想,读和写在不同的容器 ```java /** * 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; } } ```
保存文章