Java集合系列之并发包(java.util.concurrent)下的高级集合类

先看一张描述java.util.concurrent包下集合组成结构的类图

下列介绍的集合统一特性:线程安全,支持并发操作

非阻塞队列(队列无数据,操作队列产生异常或返回null,不具备等待/阻塞的特色)

ConcurrentHashMap:相对于线程安全的HashTable,优势在于HashTable不支持在循环(iterator)中对结构调整(增、删),否则会有ConcurrentModificationException异常。采用了分段锁的设计, 将一个HashMap分成N段,使用key的hashCode来确定分配到那个字段,只有在同一分段内才存在竞态关系,每个分段相当于一个HashTable,执行效率相当于提升了N倍。

ConcurrentSkipListMap:支持排序。

ConcurrentSkipListSet:支持排序且不允许重复元素。

注:上面两个,排序的实现要求集合中的对象实现Comparable接口,不重复的实现为重写hashCode和equals方法

ConcurrentLinkedQueue:队列操作(只操作队头),poll() / peek() / element()

ConcurrentLinkedDeque:双端队列(支持操作队头和队尾),pollFirst() / pollLast()

CopyOnWriteArrayList:适用于读操作>>写操作的情况。在写时拷贝,也就是如果需要对CopyOnWriteArrayList的内容进行改变,首先会拷贝一份新的List并且在新的List上进行修改,最后将原List的引用指向新的List。线程安全地遍历,因为如果另外一个线程在遍历的时候修改List的话,实际上会拷贝出一个新的List上修改,而不影响当前正在被遍历的List。ArrayList非线程安全

CopyOnWriteArraySet:HashSet非线程安全

 

阻塞队列(取空队列需要等待直到有元素,塞满队列需要等待直到有空间)

ArrayBlockingQueue:有界阻塞队列

LinkedBlockingQueue:无界阻塞队列,基于单向链表的实现

PriorityBlockingQueue:无界有序的阻塞队列,基于数组

SynchronousQueue:同步队列,插入需等待移除,移除需等待插入 

DelayQueue:延时执行任务的队列,集合元素需实现java.util.concurrent.Delayed接口

LinkedTransferQueue:与SynchronousQueue功能类似,但有嗅探功能,能尝试性的添加数据(tryTransfer()方法)

 

知识扩展:什么是CopyOnWrite容器?

CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良月柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值