第一种:
HashTable,Vector 底层使用的Synchronized加锁实现的,性能不高,不推荐。
第二种:
修饰的安全集合 SynchronizedMap,SynchronizedList,性能不高,不推荐。
第三种:
J.U.C安全集合: Blocking类,CopyOnWrite类,Concurrent类。推荐。
Blocking类,大部分实现基于锁,一般使用的是ReentrantLock锁,提供用来阻塞的方法。很多线程在不满足条件时会阻塞住。
CopyOnWrite类,通过拷贝的方式来避免多线程读写时的线程安全。使用与读多写少的场景。
Concurrent类(强烈推荐),性能高,内部很多操作使用cas优化,一般提供较高的吞吐量。
Concurrent类缺点:弱一致性
- 遍历时弱一致性,当利用迭代器遍历时,如果容器发生修改,迭代器仍然可以继续进行遍历,这时内容是旧的。
- 求大小弱一致性,size操作未必是100%正确。
- 读取弱一致性。