第四篇:走近CopyOnWriteArrayList
CopyOnWriteArrayList简介 熟悉Java开发的童鞋都知道ArrayList是线程不安全的,在多线程的环境下可能会发生fast-fail机制,抛出ConcurrentModificationException异常,虽然也有并发容器Vector,或者采用Collections的synchronizedCollection方法将ArrayList包装成线程安全类,但是这两种方式都是利用synchronized关键字修饰方法,利用独占锁来保证线程安全,由于独占锁在同一时刻只有一个线程能够获取到对象监视器即读写操作不能并行,所以效率不高。而CopyOnWriteArrayList则采用CopyOnWrite的原理来实现的一个线程安全的容器,读写分离,效率高。 环境 本源码基于JDK1.8 fast-fail机制 fast-fail是一种快速失败机制,在容器中有广泛的运用,我们都知道ArrayList是线程不安全的,当多个线程同时对集合进行结构上的修改时,就可能会产生fast-fail机制。 例如:假设存在线程1,线程2,线程1通过Iterator对集合A进行遍历,线程2对集合A进行结构上的修改(不是仅仅修改一个元素),这时候就会产生fail-fast机制,抛出ConcurrentModificationException异常。 原因:线程对容器ArrayList进行修改时