1.CopyOnWriteList写时复制的链表(写操作方法时才会加锁,读方法不会加锁,保证一定的效率)
Note:实现的大致流程是:对于读操作,不会限制,出现写操作时,会先copy原先的一个数组,并且上锁;等到写操作修改完之后将原先对list的引用只想复制后的列表。(读写分离)旧的list会被垃圾回收。
2.add方法源码,首先ReentrantLock,接着使用上锁操作,此时所有的add操作会上锁,但是不会影响读操作。
public boolean add(E e) {
final ReentrantLock lock = this.lock;
lock.lock();
try {
Object[] elements = getArray();
int len = elements.length;
Object[] newElements = Arrays.copyOf(elements, len + 1);
newElements[len] = e;
setArray(newElements);//修改引用
return true;
} finally {
lock.unlock();
}
}