基礎篇:JAVA原子元件和同步元件
阿新 • • 發佈:2021-01-07
# 前言
在使用多執行緒併發程式設計的時,經常會遇到對共享變數修改操作。此時我們可以選擇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