立刻有
全部
技术
PHP
MySQL
前端
Linux
JAVA
退出
编辑文章
选择分类
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; } } ```
保存文章