通過上面對offer和poll方法的分析,我們發(fā)現(xiàn)tail和head是延遲更新的,兩者更新觸發(fā)時(shí)機(jī)為:
1. tail更新觸發(fā)時(shí)機(jī):當(dāng)tail指向的節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)不為null的時(shí)候,會執(zhí)行定位隊(duì)列真正的隊(duì)尾節(jié)點(diǎn)的操作,找到隊(duì)尾節(jié)點(diǎn)后完成插入之后才會通過casTail進(jìn)行tail更新;當(dāng)tail指向的節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)為null的時(shí)候,只插入節(jié)點(diǎn)不更新tail。
2. head更新觸發(fā)時(shí)機(jī):當(dāng)head指向的節(jié)點(diǎn)的item域?yàn)閚ull的時(shí)候,會執(zhí)行定位隊(duì)列真正的隊(duì)頭節(jié)點(diǎn)的操作,找到隊(duì)頭節(jié)點(diǎn)后完成刪除之后才會通過updateHead進(jìn)行head更新;當(dāng)head指向的節(jié)點(diǎn)的item域不為null的時(shí)候,只刪除節(jié)點(diǎn)不更新head。
并且在更新操作時(shí),源碼中會有注釋為:hop two nodes at a time。所以這種延遲更新的策略就被叫做HOPS的大概原因是這個(gè)(猜的