jdk并发容器整理(yet)

1.CopyOnWrite

写少读多的场景

读-读  读-写 写-读  不阻塞

写-写阻塞

写时复制,为什么复制?为了迭代器等遍历读操作的安全与性能,同String

set中看似比较多余的一句,背后的目的是什么,涉及到happens-before,多线程下volatile防止指令重排,确保可见性

数据读,总量读,迭代器符合最终一致性



2.ConcurrentLinkedQueue

无界,线程安全的LinkedList

基于CAS

tail最终一致

size最终一致



3.BlockingQueue

无界:LinkedBlockingQueue,有界:ArrayBlockingQuere

线程池默认四种类型用无界阻塞队列

基于重入锁

两种BQ有何区别

size强一致



产生最终一致的根本原因是:

写不阻塞读,读给历史版本(比如CLQ的size,Mysql的MVCC),或者根本是两样东西(COW)

写的东西非volatile(CHM的迭代器)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值