天天看點

從Java内置隊列到CAS

Java的内置隊列

  • 1.基于數組的線程安全隊列
  • ArrayBlockingQueue

    基于數組實作 線程安全 通過加鎖的方式來保證線程安全

  • 2基于連結清單的線程安全隊列

    LinkedBlockingQueue 通過鎖的方式來實作線程安全

    ConcurrentLinkedQueue compare and swap CAS

    LinkedTransferQueue compare and swap CAS

Cache 之間的速度比較 如果還不了解cache 下面這個連結将的很好

推薦閱讀

https://zhuanlan.zhihu.com/p/102293437

以及CAS 計算機底層CPU是如何CAS

https://zhuanlan.zhihu.com/p/115355303

Bus Lock -> Cacheline Lock

CAS是英文單詞Compare And Swap的縮寫,翻譯過來就是比較并替換。

CAS機制當中使用了3個基本操作數:記憶體位址V,舊的預期值A,要修改的新值B。

為了減少Java的垃圾回收對系統性能的影響,會盡量選擇array/heap格式的資料結構 ArrayBlockingQueue

ArrayBlockingQueue的問題

ArrayBlockingQueue在實際使用過程中,會因為加鎖和僞共享等出現嚴重的性能問題