这些并发容器的坑,你要谨记!
摘要:JDK1.5及之后的版本中,提供的线程安全的容器,一般被称为并发容器。与同步容器一样,并发容器在总体上也可以分为四大类,分别为:List、Set、Map和Queue。
本文分享自华为云社区《【高并发】要想学好并发编程,这些并发容器的坑是你必须要注意的!!(建议收藏)》,作者:冰 河 。
其实,在JDK1.5之前的线程安全的容器,大多数都是指同步容器,使用同步容器进行并发编程时,最大的问题就是性能很差。因为同步容器中的所有方法都是使用synchronized锁进行互斥,串行度太高了,无法真正的做到并行。
所以,在JDK1.5之后,JDK中提供了并发性能更好的容器。JDK1.5及之后的版本中,提供的线程安全的容器,一般被称为并发容器。
并发容器
与同步容器一样,并发容器在总体上也可以分为四大类,分别为:List、Set、Map和Queue。总体上如下图所示。
接下来,我们分别介绍下这些并发容器在使用时的注意事项和避免踩到的坑。
List
并发容器中的List相对来说比较简单,就一个CopyOnWriteArrayList。大家可以从字面的意思中就能够体会到:CopyOnWrite,在写的时候进行复制操作,也就是说在进行写操作时,会将共享变量复制一份。那这样做有什么好处呢?最大的好处就是:读操作可以做到完全无锁化。
在CopyOnWriteArrayList内部维护了一个数组,成员变量array指向这个数组,其核心源代码如下所示。
private transient volatile Object[] array; final Object[] getArray() { return array; } final void setArray(Object[] a) { array = a; }