描述:1:我们在在多线程情况下用ArrayList a=new ArrayList();在add(param)添加信息常遇到ConcurrentModificationException 即并发修改异常 原因:多个线程争抢修改信息时候,当一个线程正在修改却被其他线程抢占去同一个位置的修改权造成修改错误,丢数据
public class UnSafeArrayList {
public static void main(String[] args){
List<String> list = new ArrayList<>();
for (int i = 0; i < 40; i++) {
new Thread(()->{
list.add(UUID.randomUUID().toString().substring(0,8));
System.out.print(list);
},String.valueOf(i)).start();
}
}
}
解决方法:
image.png
挖掘CopyOnWriteArrayList:(写时复制-读写分离)
CopyOnWriteArrayList
add
CopyOnWriteArrayList的add方法解析
图形描述CopyOnWriteArrayList的add方法
写操作:在线程数目增加时CopyOnWriteArrayList的写操作性能下降非常严重,而Collections.synchronizedList虽然有性能的降低,但下降并不明显。 读操作:在多线程进行读时,Collections.synchronizedList和CopyOnWriteArrayList均有性能的降低,但是Collections.synchronizedList的性能降低更加显著