高並發編程-07-JDK提供的原子類操作及原理
阿新 • • 發佈:2018-01-13
spa tex 通過 san current imp 什麽 mar 區別 1,原子類介紹:
針對數據類型的操作,JDK提供的原子類來方便我們的線程安全控制。
所有的類保存在 java.util.concurrent.atomic 包中
基本數據類型 AtomicInteger
數組類型 AtomicIntegerArray
2,舉個使用的例子:
解決之前的 i++ 安全性問題
如何解決?
AtomicInteger count = new AtomicInteger(0);
count.incrementAndGet();//相當於count++,區別是這裏可以保證是原子操作
3,原理:
內部的原理是采用了CAS機制,大家可以通過觀察源碼就可以發現
那麽什麽是CAS機制?
CAS有人翻譯為Compare And Set或Compare And Swap都是正確的。
在多線程並發執行的狀態下,鎖的狀態改變,基本都是使用CAS原理,它有一個比較別扭的叫法“CPU硬件同步原語”,算法是基於CPU硬件的,原子性操作,不會被其他線程打斷。
CAS的算法,比較當前值和期望的值是否相等,如果相等,則將當前值賦予一個新值。
再比如修改一個Boolean的類型的變量的值,我們也可以采用
private AtomicBoolean atomicBoolean = new AtomicBoolean(false);
public void lock(){
//期望是false,如果是false,則可以修改為true
atomicBoolean.compareAndSet(false, true);
}
高並發編程-07-JDK提供的原子類操作及原理