继承结构
特性简介
- 在同一时间段内的更新操作会自动同步,通过JVM机制来实现,每次更新都会创建一个新的ArrayList副本。不影响读操作
- 因为每次更新都会创建副本,写操作比较耗资源。因此该容器主要用于读操作频繁的场景
- 底层数据结构是可变数组
- ArrayList的线程安全版本
- 允许保存重复、空、不同的Object元素
- 该容器的Iterator不支持remove()操作,否则会抛出UnsupportedOperationException。该容器的
Iterator不会抛出ConcurrentModificationException
与ArrayList的不同
- CopyOnWriteArrayList 线程安全,ArrayList 非线程安全
- ArrayList在Iterating时做modification 操作会抛出ConcurrentModificationException,CopyOnWriteArrayList则不会抛出异常。
- ArrayList 从jdk 1.2开始引入,CopyOnWriteArrayList 从jdk1.5开始引入
- ArrayList进行Iterator时可以进行remove操作;但CopyOnWriteArrayList进行Iterator时不可以进行remove操作,否则将抛UnsupportedOperationException异常。
性能对比
C37_CopyOnWriteList
参考资料:
copyonwritearraylist-in-java
difference-arraylist-copyonwritearraylist