ArrayList线程不安全的原因是其中的add方法没有加锁
- 故障现象:java.util.ConcurrentModificationException
- 导致原因:并发争抢修改导致,参考花名册签名情况,一个人正在写,另一个同学过来抢夺,导致数据不一致异常。并发修改异常。
- 解决方案:
- 用Vector
- Collections.synchronizedList(new ArrayList<>();
- new CopyOnWriteArrayList<>();
Set线程不安全问题
解决方案:
-
- Collections.synchronizedSet(new ArraySet<>();
- new CopyOnWriteArraySet<>();
HashSet底层数据结构Hash Map,但是Set中填一个值Map中填两个值原因是HashSet的add方法调用HashMap的put方法,但是add方法中添加的值是put中的K,V是一个PRECENT常量
Map线程不安全问题:
解决方案:
5.1 Collections.synchronizedSet(new HashMap<>();
5.2 new CopyOnWriteHashMap<>();