CopyOnWrite 是用于解决并发读写的一种策略,在Write的时候对共享变量进行Copy,在副本上进行更新,再把更新好的副本原子性地替换原来的共享变量,实现了读写分离。

实现方法:

  • 读操作Read由于不涉及对共享变量的更改,因此不需要同步。
  • 写操作需要同步加锁,然后复制整个数组,在副本上进行操作,然后用修改的副本替换原来的数组,最后释放锁。如果有多个线程同时申请Write,同一时刻只能有一个线程在写。

优缺点:
– 由于修改是在副本上进行,所以修改的同时允许其他线程进行读。实现了读写分离。
– 由于需要进行拷贝,当然会存在内存占用的问题。
– 由于在进行写的过程中仍然允许读,所以数据不是实时一致的,只有在写完成后才一致,也就是最终一致。如果需要实时的一致性,建议使用读写锁。

CopyOnWrite 策略适用于那些读远多于写、且对实时性要求不高的操作,优势在读不需要同步。
这里参考了 CopyOnWriteArrayList 的实现