一、什麼是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
結果如下: