【高并发8】JUC并发容器及安全共享策略总结

版权声明:送人玫瑰,手有余香,一分也是爱 https://blog.csdn.net/m0_37156901/article/details/86034005

并发容器中同步器,大名AQS

ArrayList  -- CopyOnWriteArrayList:

写操作时候复制,当有数据写入的时候,从原有的数据中拷贝一份出来在这里写,写完之后,再将原来的数组重新指向新的数组,其这个add操作都是在锁的保护下进行,主要避免在多线程并发操作add时候,复制多个出来把数据搞乱了,

CopyOnWriteArrayList缺点

1.  拷贝,消耗内存yGC/ CGC

2. 不能用于实时读的场景,写和拷贝需要时间,调用set之后读取到的数据可能还是旧的,最终一致,实时不行,读多写少的场景

慎用。

CopyOnWriteArrayList设计思想

1. 读写分离

2. 最终一致性

3. 使用时另外开辟空间 -- 解决并发冲突

记住:

读时候:原数据上读的,不加锁, 

写: 加锁,避免多个线程并发修改,赋值多,乱。

扫描二维码关注公众号,回复: 5102772 查看本文章

看一下其add(), get() 源码java.util.concurrent

HashSet -- CopyOnWriteArraySet

和CopyOnWriteArrayList类似,继承了,和迭代器配合速度很快

TreeSet -- ConcurrentSkipListSet

支持自然排序,构造时自己定义比较器

1.  使用批量操作的 XXXall()时候要注意,因为在实现的时候调用XXX() 方法的,在每次批量操作时候能保证add,remove,这些操作的原子性,而不能保证多个ADD操作是厚不被其他线程打断,而不能需要自己做同步操作。

2. 不允许使用空元素,

HashMap  -- ConcurrentHashMap

和CopyOnWriteArrayList类似,继承了,和迭代器配合速度很快

CopyOnWriteArrayMap,不能空值,大部分使用读操作,高并发效果哈,***面试实现原理源码

TreeMap  -- ConcurrentSkipListMap

基于跳表的实现,

ConcurrentSkipListMap相比CopyOnWriteArrayMap有不可比拟的有点

1. key是有序的。

2. 支持更高的并发。。数越多,越好,一般就之前的几个并发同步包

接下来看JUC的实际构成

主要五部分

总结

 

 

这四点主要是从之前的:

不可变对象

线程封闭

同步容器

并发容器

中总结出来的

下来介绍JUC 里面基于AQS的工具,特别强大。

猜你喜欢

转载自blog.csdn.net/m0_37156901/article/details/86034005