CopyOnWrite 是用於解決併發讀寫的一種策略,在Write的時候對共享變量進行Copy,在副本上進行更新,再把更新好的副本原子性地替換原來的共享變量。併發
實現:spa
讀操做Read不涉及對共享變量的更改,所以不須要同步。線程
若是有多個線程同時申請Write,在各自拷貝的副本上進行修改,而後更新回共享變量,就會致使某些線程的修改被其餘線程覆蓋。所以Write必須在同步的狀況下進行。orm
優缺點:內存
因爲修改是在副本上進行,因此修改的同時容許其餘線程進行讀。同步
因爲須要進行拷貝,固然會存在內存佔用的問題。it
因爲在進行寫的過程當中仍然容許讀,因此數據不是實時一致的,只有在寫完成後才一致,也就是最終一致。若是須要實時的一致性,建議使用讀寫鎖。變量
CopyOnWrite 策略適用於那些讀遠多於寫、且對實時性要求不高的操做,優點在讀不須要同步。List
更多瞭解可參考 JUC 裏 CopyOnWriteArrayList 的實現。數據