1,原子類介紹:
針對(duì)數(shù)據(jù)類型的操作,JDK提供的原子類來方便我們的線程安全控制嚎货。
所有的類保存在 java.util.concurrent.atomic 包中
基本數(shù)據(jù)類型 AtomicInteger
數(shù)組類型 AtomicIntegerArray
2损话,舉個(gè)使用的例子:
解決之前的 i++ 安全性問題
如何解決序仙?
AtomicInteger count = new AtomicInteger(0);
count.incrementAndGet();//相當(dāng)于count++梅鹦,區(qū)別是這里可以保證是原子操作
3裆甩,原理:
內(nèi)部的原理是采用了CAS機(jī)制,大家可以通過觀察源碼就可以發(fā)現(xiàn)
那么什么是CAS機(jī)制齐唆?
CAS有人翻譯為Compare And Set或Compare And Swap都是正確的淑掌。
在多線程并發(fā)執(zhí)行的狀態(tài)下,鎖的狀態(tài)改變蝶念,基本都是使用CAS原理抛腕,它有一個(gè)比較別扭的叫法“CPU硬件同步原語”,算法是基于CPU硬件的媒殉,原子性操作担敌,不會(huì)被其他線程打斷。
CAS的算法廷蓉,比較當(dāng)前值和期望的值是否相等全封,如果相等,則將當(dāng)前值賦予一個(gè)新值桃犬。
再比如修改一個(gè)Boolean的類型的變量的值刹悴,我們也可以采用
private AtomicBoolean atomicBoolean = new AtomicBoolean(false);
public void lock(){
????//期望是false,如果是false攒暇,則可以修改為true
????atomicBoolean.compareAndSet(false, true);
}