1. 程式人生 > >基礎篇:JAVA原子元件和同步元件

基礎篇:JAVA原子元件和同步元件

# 前言 在使用多執行緒併發程式設計的時,經常會遇到對共享變數修改操作。此時我們可以選擇ConcurrentHashMap,ConcurrentLinkedQueue來進行安全地儲存資料。但如果單單是涉及狀態的修改,執行緒執行順序問題,使用Atomic開頭的原子元件或者ReentrantLock、CyclicBarrier之類的同步元件,會是更好的選擇,下面將一一介紹它們的原理和用法 - 原子元件的實現原理CAS - AtomicBoolean、AtomicIntegerArray等原子元件的用法、 - 同步元件的實現原理 - ReentrantLock、CyclicBarrier等同步元件的用法 關注公眾號,一起交流,微信搜一搜: 潛行前行 --- # 原子元件的實現原理CAS - cas的底層實現可以看下之前寫的一篇文章:[詳解鎖原理,synchronized、volatile+cas底層實現](https://juejin.cn/post/6854573210768900110) ## 應用場景 - 可用來實現變數、狀態在多執行緒下的原子性操作 - 可用於實現同步鎖(ReentrantLock) # 原子元件 - 原子元件的原子性操作是靠使用cas來自旋操作volatile變數實現的 - volatile的型別變數保證變數被修改時,其他執行緒都能看到最新的值 - cas則保證value的修改操作是原子性的,不會被中斷 ### 基本型別原子類 ```java AtomicBoolean //布林型別 AtomicInteger //正整型數型別 AtomicLong //長整型型別 ``` - 使用示例 ```java public static void main(String[] args) throws Exception { AtomicBoolean atomicBoolean = new AtomicBoolean(false); //非同步執行緒修改atomicBoolean Completab