问题和解决方法
描述:1:我们在在多线程情况下用Set a=new HashSet();在add(param)添加信息常遇到ConcurrentModificationException
即并发修改异常
原因:多个线程争抢修改信息时候,当一个线程正在修改却被其他线程抢占去同一个位置的修改权造成修改错误,丢数据
解决方法:
- 1使用java.util.Collections工具类,它提供了对List Map Set的封装,使其安全
Set<Object> set = Collections.synchronizedSet(new HashSet<>());
- 2使用java.util.Concurrent里有一些如CopyOnWriteArrayList,CopyOnWriteSet的包装型Set;(好处可以并发的读)
Set<Object> set=new CopyOnWriteSet<>();
CopyOnWrite挖掘见https://www.jianshu.com/p/c34c39590620
注意1
HashSet底层是HashMap的解析见