博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA中写时复制(Copy-On-Write)Map实现
阅读量:6978 次
发布时间:2019-06-27

本文共 1749 字,大约阅读时间需要 5 分钟。

1,什么是写时复制(Copy-On-Write)容器?

写时复制是指:在并发访问的情景下,当需要修改JAVA中Containers的元素时,不直接修改该容器,而是先复制一份副本,在副本上进行修改。修改完成之后,将指向原来容器的引用指向新的容器(副本容器)。

 

2,写时复制带来的影响

①由于不会修改原始容器,只修改副本容器。因此,可以对原始容器进行并发地读。其次,实现了读操作与写操作的分离,读操作发生在原始容器上,写操作发生在副本容器上。

②数据一致性问题:读操作的线程可能不会立即读取到新修改的数据,因为修改操作发生在副本上。但最终修改操作会完成并更新容器,因此这是最终一致性。

 

3,在JDK中提供了CopyOnWriteArrayList类和CopyOnWriteArraySet类,但是并没有提供CopyOnWriteMap的实现。因此,可以参考CopyOnWriteArrayList自己实现一个CopyOnWriteHashMap

这里主要是实现 在写操作时,如何保证线程安全。

import java.util.Collection;import java.util.HashMap;import java.util.Map;import java.util.Set;public class CopyOnWriteMap
implements Map
, Cloneable{ private volatile Map
internalMap; public CopyOnWriteMap() { internalMap = new HashMap
(100);//初始大小应根据实际应用来指定 } @Override public V put(K key, V value) { synchronized (this) { Map
newMap = new HashMap
(internalMap);//复制出一个新HashMap V val = newMap.put(key, value);//在新HashMap中执行写操作 internalMap = newMap;//将原来的Map引用指向新Map return val; } } @Override public void putAll(Map
m) { synchronized (this) { Map
newMap = new HashMap
(internalMap); newMap.putAll(m); internalMap = newMap; } } @Override public V get(Object key) { V result = internalMap.get(key); return result; } ......//other methods inherit from interface Map }

从上可以看出,对于put() 和 putAll() 而言,需要加锁。而读操作则不需要,如get(Object key)。这样,当一个线程需要put一个新元素时,它先锁住当前CopyOnWriteMap对象,并复制一个新HashMap,而其他的读线程因为不需要加锁,则可继续访问原来的HashMap。

 

4,应用场景

CopyOnWrite容器适用于读多写少的场景。因为写操作时,需要复制一个容器,造成内存开销很大,也需要根据实际应用把握初始容器的大小。

不适合于数据的强一致性场合。若要求数据修改之后立即能被读到,则不能用写时复制技术。因为它是最终一致性。

总结:写时复制技术是一种很好的提高并发性的手段。

 

本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/,如需转载请自行联系原作者

你可能感兴趣的文章
iOS多线程编程之NSOperation和NSOperationQueue的使用
查看>>
SAP QM 'QM System' 有什么控制作用?
查看>>
Health Check in eShop -- 解析微软微服务架构Demo(五)
查看>>
项目沟通管理计划
查看>>
[20160608]自治事务引起死锁.txt
查看>>
AliGenie AR Fuels the Ali New Retail Strategy - Interactive Marketing Activities
查看>>
一个最简单的通过WireShark破解SSL加密网络数据包的方法
查看>>
教你用TensorFlow和自编码器模型生成手写数字(附代码)
查看>>
荣之联“云桥OneBridge”让IT运维事半功倍
查看>>
中国人工智能学会通讯——人工智能在各医学亚专科的发展现状及趋势 1.3 人工智能在各医学亚专科的发展态势...
查看>>
新技术、新思维开创公共安全管理新模式
查看>>
新产品发布与A轮2000万美元 双喜临门后GrowingIO还要做什么
查看>>
《大数据、小数据、无数据:网络世界的数据学术》一 导读
查看>>
玉山银行的一名新员工“玉山小i随身金融顾问”
查看>>
消除危害 让BYOD策略更安全的几个秘诀
查看>>
云端卫士架构师讲DDoS攻击的智能防御之道
查看>>
《算法技术手册》一2.4.6 二次方的算法性能
查看>>
物联网时代全面降临
查看>>
什么是新IP的四层网络技术
查看>>
大数据流通存隐忧 产业信任体系亟待建立
查看>>