美文网首页
13. ConcurrentLinkedQueue/Deque

13. ConcurrentLinkedQueue/Deque

作者: 段段小胖砸 | 来源:发表于2021-09-08 15:06 被阅读0次

AQS内部的阻塞队列实现原理:基于双向链表,通过对head/tail进行CAS操作,实现入队和出队。

ConcurrentLinkedQueue 的实现原理和AQS 内部的阻塞队列类似:同样是基于 CAS,同样是通过head/tail指针记录队列头部和尾部,但还是有稍许差别。

  • 它是一个单向链表
  • 在AQS的阻塞队列中,每次入队后,tail一定后移一个位置;每次出队,head一定后移一个位置,以保证head指向队列头部,tail指向链表尾部。但在ConcurrentLinkedQueue中,head/tail的更新可能落后于节点的入队和出队,因为它不是直接对 head/tail指针进行 CAS操作的,而是对 Node中的 item进行操作。
  • 出队列:
  1. 即使tail指针没有移动,只要对p的next指针成功进行CAS操作,就算成功入队列。
  2. 只有当 p != tail的时候,才会后移tail指针。也就是说,每连续追加2个节点,才后移1次tail指针。即使CAS失败也没关系,可以由下1个线程来移动tail指针。

相关文章

网友评论

      本文标题:13. ConcurrentLinkedQueue/Deque

      本文链接:https://www.haomeiwen.com/subject/abhpwltx.html