多线程并发情况下出现ConcurrentModificationException并发修改异常
List不安全
ArrayList并发下不安全
Vector默认是安全的,已弃用
要想ArrayList安全:
//1、Vector
List<String> list = new Vector<>();
//2、Collections.synchronizedList
List<String> list = Collections.synchronizedList(new ArrayList<>());
//3、CopyOnWriteArrayList
List<String> list = new CopyOnWriteArrayList<>();
CopyOnWrite:写入时复制 COW,计算机程序设计领域的一种优化策略。
多个线程调用的时候,list,读取时固定的,写入(存在覆盖操作),CopyOnWrite在写入的时候避免覆盖。
Vector和CopyOnWrite写入时,底层区别:
Vector用了Synchronized锁,CopyOnWrite用了ReentrantLock锁效率上更高。
Set不安全
//1、Collections.synchronizedList
Set<String> set = Collections.synchronizedList(new HashSet<>());
//2、CopyOnWriteArraySet
Set<String> set = new CopyOnWriteArraySet<>();
HashSet底层是HashMap,set的本质就是map的key无法重复!
Map不安全
初始化容量16、加载因子0.75
//安全:ConcurrentHashMap
Map<String, String> map = new ConcurrentHashMap<>();