CopyOnWriteArrayList是ArrayList的一个线程安全变体,所有可变操作(add、set...)都可以通过对底层数组进行一次新的复制来实现。
虽然复制数组的开销挺大,但在下面两种情况下比较适用:
遍历操作数量远多于可变操作的数量时:比如观察者模式中侦听者列表适合用CopyOnWriteArrayList存储
不能或者不想进行同步遍历
对CopyOnWriteArrayList的迭代可以保证不会抛出ConcurrentModificationException,原因见第一段。类似的还有CopyOnWriteArraySet。