并发容器(map,list,queue的并发容器)

ConcurrentHashMap

和hash差不多,不过hashmap不是线层安全的,而这个是线程安全的,关于hashmap可以看这1.8版本hashmap分析

这里也就是讲一下主要的区别:

CopyOnWriteArrayList

线程安全的变体ArrayList ,其中所有可变操作( add , set ,等等)通过对底层数组的最新副本实现

优点:

  1. 提供高效地读取操作,使用在读多写少的场景,读取操作不用加锁,且是安全的
  2. 写操作时,先copy一份原有数据数组,再对复制数据进行写入操作,最后将复制数据替换原有数据,从而保证写操作不影响读操作
  3. 使用了独占锁,支持多线程下的并发写。

缺点:

  1. 占用内存,写时 copy 效率低:如果这些对象占用的内存比较大,那么这个时候很有可能造成频繁的 Yong GCFull GC
  2. CopyOnWrite 容器只能保证数据的最终一致性,不能保证数据的实时一致性:写入的的数据,马上能读到就不要用它
  3. 当我们使用迭代器便利 CopyOnWriteArrayList 的时候,不能保证拿到的数据是最新的,这也是一致性问题。
  4. 由于实际使用中可能没法保证 CopyOnWriteArrayList 到底要放置多少数据,万一数据稍微有点多,每次 add/set 都要重新复制数组,这个代价实在太高昂了。在高性能的互联网应用中,这种操作分分钟引起故障。

ConcurrentLinkedQueue

链表作为数据结构,它采用无锁操作,可以任务是高并发环境下性能最好的队列。非阻塞线程安全队列,无界,故不太适合做生产者消费者模式

知道有这个,详细请看并发容器之ConcurrentLinkedQueue

LinkedBlockingQueue

链表的数据结构,阻塞线程安全队列,有界,适合做生产者消费者

详细请看【细谈Java并发】谈谈LinkedBlockingQueue

ConcurrentSkipListMap

SkipList(跳表)是一种随机性的数据结构,用于替代红黑树,因为它在高并发的情况下,性能优于红黑树。跳表实际上是以空间换取时间

详细请看基于跳跃表的 ConcurrentSkipListMap 内部实现(Java 8)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值