首先實現(xiàn)線程安全的queue的方式很很多種,比如說方法全部加鎖恒傻,再或者使用基于CAS的LinkedQueue澈驼。然后ConcurrentLinkedQueue是一個無界線程安全隊列(當(dāng)然也遵循先進先出)
使用方式上跟普通的queue 基本沒有任何區(qū)別,只不過它是線程安全的独柑,但注意以下幾個函數(shù):
1迈窟、Peek函數(shù)只取第一個元素,并不出隊忌栅,poll函數(shù)才真的出隊(poll函數(shù)如果函數(shù)為空則null)
public E peek() { return peekFirst(); }
image.png
2车酣、size函數(shù)
跟list中維持一個長度元素不同的是,這里的queue需要遍歷整個鏈表來完成對應(yīng)的長度統(tǒng)計索绪,時間花銷可想而知湖员,慎用。
image.png
在使用這類同步容器時需要注意的是瑞驱,它能夠保證單個操作的原子性但是像那種先判斷后操作的典型的競態(tài)條件還是存在問題的娘摔。