/**
* 描述: ArrayList线程不安全由于add方法没加锁,多线程高并发情况下java.util.ConcurrentModiricationException异常
*
* @author [email protected]
* @create 2020/2/21 13:30
* @since 2.16.3
*/
public class ArrayList {
public static void main(String[] args) {
List<String> list = new java.util.ArrayList<>();
for (int i = 1; i <= 30; i++) {
new Thread(() -> {
list.add(UUID.randomUUID().toString().substring(0, 8));
System.out.println(list);
}, String.valueOf(i)).start();
}
/**
* 1.高并发情况下出现的故障现象:java.util.ConcurrentModificationException
* 2.解决方法:
* new Vector()
* Collections.synchronizedList(new ArrayList())
* new CopyOnWriteArrayList();(JUC包)
* 3.CopyOnWrite容器即写时复制的容器,往一个容器中添加元素的时候,不直接往当前容器Object[]添加,而是先将当前容器Object[]进行copy,
* 复制出一个新的容器Object[] newElements,然后新的容器Object[] newElements里添加元素,添加完元素之后,
* 再将原容器的引用指向新的容器,setArray(newElements),这样做的好处是可以对CopyOnWrite容器进行并发的读,
* 而不需要加锁,因为当前容器不会添加任何元素,所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。
*/
}
}
ArrayList类线程不安全的解决方法
猜你喜欢
转载自blog.csdn.net/qq_36594703/article/details/104435593
今日推荐
周排行