`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节点不总是尾节点
出队操作