【高頻面試題】Cas你知道嗎?

一、什麼是CAS?

1、比較並交換

AtomicInteger

compareAndSet  如果期望值(主內存的值)與修改值(工作內存的值)相同,則修改;

類似GitHub的提交版本號。

2、CAS的底層原理是什麼?

它是一條併發原語。

比較當前工作內存和主內存的值,如果相同則執行規定操作,否則繼續直到主內存和工作內存的值一致爲止。

 

CAS應用

CAS中有三個操作數,內存值V,期望值A,要修改的值B。

當且僅當V等於A時,纔會將內存中的V替換爲B,否則什麼都不做。

 

3、CAS缺點

①getAndAddInt方法執行的時候,有個dowhile方法,

如果CAS失敗,會一直嘗試,如果CAS 長時間不成功,會給CPU帶來很大的開銷。

②他只能保證一個共享變量的原子操作。

ABA問題

產生

CAS實現需要取出內存的數據比較並替換,在這個時間差內會導致數據變化。

如何解決?

原子引用  AtomicReference<?>

時間戳原子引用  AtomicStampedReference -  新增機制,修改版本號(時間戳)

T1 100 1 

T2 100 1   101 2   100 3 

結果如下:

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章