实战系列-Java中线程安全集合类(二)

本文深入探讨Java中JCTools库提供的非阻塞Queue实现,包括SPSC、MPSC和MPMC场景下的有界与无界队列,如SpscUnBoundedArrayQueue、MpscChunkedArrayQueue等,分析其内部机制及性能优势。

导语
  上次分享中讲到了比较常用的几个Map相关的集合。这篇分享主要来记录一下,剩下的关于队列的一些信息以及其他补充的信息。

JCTools 非阻塞Queue

  JCTools 所使用的队列是基于Lamport的无等待SPSC算法,然后稍微做了改进。Lamport算法是在顺序一致性内存模型下可以实现单生产者/单消费者的循环缓冲区。在做了调整之后,在总存储顺序和其他较弱的一致性模型下也是正确的。使用CAS的方式完成实现,相较于使用锁的方式可以减少很多性能的开支,抛弃了锁的申请与切换,可以带来很大的性能提升。

SPSC-单一生产者单一消费者(有界和无界)
  只有同步,没有互斥。只有一个生产者,不存在同时有两个生产者使用缓冲区资源造成数据不一致的状态。只需要控制好在缓冲区满的时候不再继续添加元素。有界与无界的区别是一个有缓冲区上限,一个缓冲区可以不断向后延伸。

有界PscArrayQueue

初始化

public SpscArrayQueue(int
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

nihui123

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

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

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

打赏作者

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

抵扣说明:

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

余额充值