2018-06-05

java基礎(chǔ)

cas自旋-基于內(nèi)存值的判斷

基于CAS操作的變量必須聲明為Volatile類型,這樣多線程操作,能保證線程1修改的值立馬在線程2中可以觀察的到。因此當(dāng)線程二讀取內(nèi)存塊的值作為預(yù)期值,然后進(jìn)行其他操作,同一時(shí)刻,線程1將內(nèi)存塊的值改變,線程2設(shè)置值的時(shí)候,發(fā)現(xiàn)內(nèi)存塊的值與預(yù)期的值不一致,就認(rèn)為操作失敗,已有線程修改。

JDK1.8中的ConcurrentHashMap就是采用此CAS算法保證高并發(fā)的線程安全。

CAS的弊端之一就是,線程1在把內(nèi)存塊值改掉一次,然后又修改一次恢復(fù)原來的值,其實(shí)這個(gè)時(shí)候已經(jīng)執(zhí)行了很多操作了,但是線程2認(rèn)為值沒有變,為預(yù)防此結(jié)果因采用版本號(hào)來判斷,沒修過一次自增1。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容