作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题
代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。码炫课堂的个人空间-码炫码哥个人主页-面试,源码等
释放21集全网最深ConcurrentHashMap的vip视频,复现每一行源码
COW
,Copy-On-Write,即写时复制,是在多线程环境下实现线程安全的技术。它的核心思想是当线程尝试修改数据时,不直接在原有的数据上进行修改操作,而是先将原有数据复制一份,在副本上进行修改,修改完成后再将原数据的引用指向新修改过的副本。这样,读操作可以在不加锁的情况下并发进行,因为它们访问的是“不变”的集合。
由于读操作无需加锁,所以大大提高了读并发的性能。写采用加锁和复制的技术,保证了线程安全。
COW
在每次写操作时都要复制整个数据,所以会加大内存的开销。
COW
采用牺牲写操作的性能和增加内存开销来保证线程安全和提高读操作性能,所以 COW
一般适用于读操作大大多于写操作的并发场景。在 Java 采用 COW 的技术有 CopyOnWriteArrayList
和 CopyOnWriteArraySet
。