COW
,Copy-On-Write,即写时复制,是在多线程环境下实现线程安全的技术。它的核心思想是当线程尝试修改数据时,不直接在原有的数据上进行修改操作,而是先将原有数据复制一份,在副本上进行修改,修改完成后再将原数据的引用指向新修改过的副本。这样,读操作可以在不加锁的情况下并发进行,因为它们访问的是“不变”的集合。
由于读操作无需加锁,所以大大提高了读并发的性能。写采用加锁和复制的技术,保证了线程安全。
COW
在每次写操作时都要复制整个数据,所以会加大内存的开销。
COW
采用牺牲写操作的性能和增加内存开销来保证线程安全和提高读操作性能,所以 COW
一般适用于读操作大大多于写操作的并发场景。在 Java 采用 COW 的技术有 CopyOnWriteArrayList
和 CopyOnWriteArraySet
。