List
解决:
- List<string> list = new Vector<>();
- List<string> list = Collections.synchronizedList(new ArrayList<>());
- List<string> list = new CopyOnWriteArrayList<>();
Vector:底层使用synchronized实现add方法
使用synchronized会使运行效率变低;
CopyOnWrite:写入时复制,是计算机程序设计领域的一种优化策略
避免写入时覆盖
读写分离
使用的ReentrantLock lock锁
Set
解决:
- Set<string> set = Collections.synchronizedSet(new HashSet<>());
- Set<string> set = new CopyOnWriteArraySet<>();
HashSet底层就是HashMap
public HashSet(){
map = new HashMap<>();
}
//add set本质就是无法重复key值的map
public boolean add(E e){
return map.put(e,PRESENT) == null;
}
private static final Object PRESENT = new Object();//不变的值
Map
解决:
- Map<string> map = Collections.synchronizedMapt(new HashMap<>());
- Map<string> map = ConcurrentHashMap<>();