多线程情况下操作 List add / remove java.util.ConcurrentModificationException
List 实现线程安全的方式:
java.util.Vector
所有的操作方法都是synchronized
修饰, 确保线程安全java.util.Collections.synchronizedList(list)
同样利用synchronized
代码块, 包装原 list 的操作, 实现线程安全java.util.concurrent.CopyOnWriteArrayList
读写分离的思想, 写上锁, 读无锁. 写入时, 加锁 (利用了java.util.concurrent.locks.ReentrantLock
上锁), 复制原数组 (并且数组长度 + 1, 赋值数组末尾元素为要新增的元素), 再更新数组的引用, 解锁.