1、老版本线程安全集合类
HashTable,Vector
2、Collections装饰的线程安全集合
Collections.synchronizedCollection(); Collections.synchronizedList(); Collections.synchronizedMap(); Collections.synchronizedSet(); Collections.synchronizedNavigableMap(); Collections.synchronizedNavigableSet(); Collections.synchronizedSortedMap(); Collections.synchronizedSortedSet();
3、java.until.concurrent包下的线程安全集合
(1)Blocking
Blocking大部分实现基于锁,并提供阻塞的方法
(2)CopyOnWrite
修改开销较重
(3)Concurrent
i)内部使用cas,有较高的吞吐量
ii)弱一致性
迭代器遍历时,如果容器发生修改,迭代器仍然可以继续遍历,只是遍历的数据是旧值。求size操作未必100%准确
案例:
ConcurrentHashMap
Map<String, LongAdder> map=new ConcurrentHashMap<>(); //在多线程中判断map中key是否存在,如果不存在,则将key放入mao中,并产生一个累加器 LongAdder longAdder = map.computeIfAbsent(key, (key) -> new LongAdder()); longAdder.increment();