Collections.synchronizedList 、CopyOnWriteArrayList、Vector介绍、源码浅析与性能对比【文末福利】
ArrayList线程安全问题 众所周知, ArrayList 不是线程安全的,在并发场景使用 ArrayList 可能会导致add内容为null,迭代时并发修改list内容抛 ConcurrentModificationException 异常等问题。java类库里面提供了以下三个轮子可以实现线程安全的List,它们是 Vector Collections.synchronizedList CopyOnWriteArrayList 本文简要的分析了下它们线程安全的实现机制并对它们的读,写,迭代性能进行了对比。 Vector 从JDK1.0开始, Vector 便存在JDK中, Vector 是一个线程安全的列表,底层采用数组实现。其线程安全的实现方式非常粗暴: Vector 大部分方法和 ArrayList 都是相同的,只是加上了 synchronized 关键字,这种方式严重影响效率,因此,不再推荐使用 Vector 了。JAVA官方文档中这样描述: If a thread-safe implementation is not needed, it is recommended to use ArrayList in place of Vector. 如果不需要线程安全性,推荐使用ArrayList替代Vector 关键源码如下: public synchronized