天天看點

6.網際網路大廠高頻面試題-cas

文章目錄

  • CAS是什麼
  • CAS底層原理-上
    • atomicInteger.getAndIncrement()為啥可以保證原子性
  • cas底層原理-下
  • cas缺點

CAS是什麼

cas:比較并交換(compareAndSet)

6.網際網路大廠高頻面試題-cas

想突破一萬五,必須要說得出底層!網際網路公司不是不招,而是招高手。

6.網際網路大廠高頻面試題-cas

多線程,發生的原子性問題,是因為執行太快發生了覆寫,值丢失了。

看方法的源碼:

6.網際網路大廠高頻面試題-cas

兩個參數,一個是期望值,一個是更新值,主記憶體空間中有個變量a,3個線程把a複制到了工作記憶體中,然後想要修改主記憶體中的a,肯定希望此時主記憶體中還是自己複制過來的a,這就是第一個參數,期望值,如果不是a了,就傳回false(整個流程就得重新取得主記憶體中的a的值,然後重複這個操作,直到期望值跟主記憶體中的值比對起來。),如果是a,就傳回true,并設定值。

測試代碼:

6.網際網路大廠高頻面試題-cas
6.網際網路大廠高頻面試題-cas

這就說明,隻有期望值和實際值一樣,才會執行指派操作,傳回true,如果實際值不滿足期望值,就會傳回false,不會指派。這就是最明顯的比較并交換。

總結:如果線程的期望值,跟實體記憶體的真實值一樣,就修改為更新的值,本次操作為true,反之,為false。

CAS底層原理-上

底層原理,兩個關鍵字:自旋鎖、unsafe類。

atomicInteger.getAndIncrement()為啥可以保證原子性

cas底層原理-下

cas缺點

  • 循環時間長
    6.網際網路大廠高頻面試題-cas
  • 隻能保證一個共享變量的原子操作
    6.網際網路大廠高頻面試題-cas
    多個變量隻能加鎖了。
  • 他會引出來ABA問題

繼續閱讀