CopyOnWriteArrayList,ReadWriteLock,ConcurrentHashMap

CopyOnWriteArrayList

原理:当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器

特点:读写分离。读的时候不需要加锁,写的时候需要加锁。适用于读多写少的场景

不足:内存占用过大(写操作时将对对象进行复制);只能保证数据最终一致性,而非实时一致性

参考: http://www.cnblogs.com/dolphin0520/p/3938914.html

ReadWriteLock

特点:对读写状态进行互斥区分,有互斥时才加锁。写与写之间互斥,读与写之间互斥,
读与读之间可以并发执行。区分读写,读的时候使用读锁,写的时候使用写锁。在读多写少的情况下可以提高效率

ConcurrentHashMap

用分离锁实现多个线程间的更深层次的共享访问。(JAVA8貌似做了很大的改动)
用 HashEntry 对象的不变性来降低执行读操作的线程在遍历链表期间对加锁的需求
通过Volatile,协调不同线程间读/写操作的内存可见性
在ConcurrentHashMap中,线程对映射表做读操作时,一般情况下不需要加锁就可以完成,对容器做结构性修改的操作才需要加锁

参考: http://blog.csdn.net/dfsaggsd/article/details/50572974

猜你喜欢

转载自leozam.iteye.com/blog/2388526