JAVA 并发编程之五:同步容器: ConcurrentHashMap/Set +CopyOnWriteArrayList + ArrayBlockingQueue

本文介绍了JAVA并发编程中的同步容器,包括ConcurrentHashMap、CopyOnWriteArrayList和ArrayBlockingQueue等。强调了在使用阻塞队列BlockingQueue时,应优先使用put和take方法,并探讨了阻塞队列在满和空时的阻塞机制。此外,文章还提到了阻塞队列在生产者消费者模型中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

1. 支持CAS的数据结构使用场景:
避免使用同时锁??:如: AtomicXXX、ConcurrentMap、CopyOnWriteList、ConcurrentLinkedQueue;

2. 阻塞队列:
a. 在BlockingQueue中,要使用put和take,而非offer和poll。
b. 如果要使用offer和poll,也是要使用带等待时间参数的offer和poll。
c. 使用drainTo批量获得其中的内容,能够减少锁的次数。
d. 使用BlockingQueue的时候,尽量不要使用从Queue继承下来的 方法,否则就失去了Blocking的特性了。

 

同步容器

解决并发情况下的容器线程安全问题的。给多线程环境准备一个线程安全的容器对象。线程安全的容器对象: Vector, Hashtable。线程安全容器对象,都是使用 synchronized 方法实现的。 
concurrent 包中的同步容器,大多数是使用系统底层技术实现的线程安全。类似 native。 Java8 中使用 CAS。

 

Map/Set 

ConcurrentHashMap/ConcurrentHashSet

底层哈希实现的同步 Map(Set)。效率高,线程安全。使用系统底层技术实现线程安全。量级较 synchronized 低。key 和 value 不能为 null。

ConcurrentSkipListMap/ConcurrentSkipListSet

底层跳表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

架构师训练营

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

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

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

打赏作者

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

抵扣说明:

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

余额充值