JAVA队列 -> ConcurrentLinkedQueue

`ConcurrentLinkedQueue`是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部;当我们获取一个元素时,它会返回队列头部的元素。它采用了“wait-free”算法(即CAS算法)来实现,该算法在Michael&Scott算法上进行了一些修改

如何实现一个线程安全的队列?

使用阻塞算法(用一个锁(入队和出队都同一把锁)或两把锁(入队和出队用不同的锁)等范式来实现)

使用非阻塞算法(使用循环CAS的方式来实现)

`ConcurrentLinkedQueue`由`head`节点和`tail`节点组成,每个节点(`Node`)由节点元素(`item`)和指向下一个节点(`next`)的引用组成,节点与节点之间就是通过这next关联起来,从而组成一张链表结构的队列。默认情况下`head`节点存储的元素为空,`tail`节点等于head节点。

入队操作

1.将入队节点设置成当前队列尾节点的下一个节点

2.更新tail节点,如果tail节点的next节点不为空,则将入队节点设置成tail节点,如果tail节点的next节点为空,则将入队节点设置成tail的next节点,所以tail节点不总是尾节点

出队操作

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值