OpenJDK: CopyOnWriteArrayList

写的时候加锁(因为要替换 array 数组的引用,而且复制的过程比较耗时,不宜自旋),读的时候不用加锁。替换的安全性由 Java volatile 保证。