LinkedBlockingQueue 单向链表的实现

LinkedBlockingQueue是Java并发编程中的一种阻塞队列,基于单向链表实现,允许并发的读写操作。与ArrayBlockingQueue不同,它使用两个ReentrantLock来控制并发,实现写读读写的并行。ArrayBlockingQueue则因数组结构无法原子化移动位置,采用单一锁来控制并发。链表结构的特性使得LinkedBlockingQueue在头部删除和尾部添加时避免了位置移动的问题,通过原子性计数器保证了并发操作的正确性。
摘要由CSDN通过智能技术生成

之前犯了一个错误,一直以为ArrayBlcokingQueue用的是单向链表,LinkedBlockingQueue用的是双向链表。这是一个错误的理解,在此要纠正下。

ArrayBlcokingQueue与LinkedBlockingQueue在自定义线程池的时候经常用的两种队列模式。

ArrayBlcokingQueue是 基于数组的先进先出阻塞队列。

LinkedBlockingQueue是基于单向链表的先进先出阻塞队列。

 

在实际的业务场景中我们一般会碰到以下四种场景(在对同一个数据进行操作时)

写写 (不可并行)

写读 (?)

读读 (可并行)

读写  (?)

为什么读写和写读这里打个问号呢?这里我也不好回答究竟可不可以并行。在innoDB数据库中读写,写读是可以并行的。数据库中实现了MVCC(多版本控制),在每次进行操作的时候都会找跟版本一致快照数据,进行读操作。从而实现写阻塞读。

这里大家可以去看看mvcc与copy on w

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值