13. ConcurrentLinkedQueue/Deque

2021-09-08  本文已影响0人  段段小胖砸

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

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

  1. 即使tail指针没有移动,只要对p的next指针成功进行CAS操作,就算成功入队列。
  2. 只有当 p != tail的时候,才会后移tail指针。也就是说,每连续追加2个节点,才后移1次tail指针。即使CAS失败也没关系,可以由下1个线程来移动tail指针。
上一篇 下一篇

猜你喜欢

热点阅读