AtomicInteger的底層實現原理

一、AtomicInteger的底層實現原理

AtomicInteger是對int類型的一個封裝,提供原子性的訪問和更新操作,其原子性操作的實現是基於CAS(compare-and -swap)技術。

二、CAS

CAS算法的過程是這樣的,它包含三個參數CAS(V,E,N)。V表示要更新的變量,E表示預期值,N表示新值。僅當V值等於E值時,纔會將V的值設爲N。如果V值和E值不同,說明已經有了其他線程做了修改,則當前線程什麼都不做。最後,CAS返回當前V的真實值。CAS是抱着樂觀的態度來的,它總認爲自己可以完成。當有多個線程競爭時,總有一個線程能夠完成。其他線程則繼續嘗試,直到任務完成。CAS操作即使沒有鎖,也能發現其他線程對當前線程的干擾,並進行正確處理。

由於CAS的這種機制,它是非阻塞的,天生對死鎖免疫。

三、AbstractQueueSynchroner

AQS是一個構建鎖的同步器的框架,通過AQS很多同步器都可以很容易且高效的構建出來。包括ReentrantLock,Semphore,CyclicBarrier,CountDownLatch,ReentrantLockReadWriteLock,SynchronousQueue。大部分開發者都不會直接使用AQS,標準同步器類的集合能夠滿足大部分的需求。

AQS內部數據和方法,可以簡單拆分爲:

  • 一個volatile的整數成員表徵狀態,同時提供了setState和getState方法
private volatile int state;
  • 一個先入先出的等待線程隊列,以實現多線程間競爭和等待,這是AQS機制的核心之一
  • 各種基於CAS的基礎操作方法,已經各種期望具體同步結構去實現的acquire/release方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章