cas aqs lock之間的關系


CAS

  對應cpu的硬件指令, 是最原始的原子操作

  cas主要是在AtomicInteger   AtomicXXX類中使用, 用於實現線程安全的自增操作 ++.  對應一個unsafe對象, 根據os平台的不同,操作cpu指令c++代碼有少許不同

   compareAndSetState(int expect, int update)   在當前值==expect時,變更為update值

AQS

全稱是AbstractQueuedSynchronizer, 它是基於cas的鎖同步框架,這個類是抽象的,其中有1個狀態統計變量stateOffset是使用cas來操作的,
具體實現類都使用這個狀態變量,達到各自鎖的操作 @see 《JAVA並發編程實踐》

下圖中可以看到ReentrantLock, ReentrantReadWriteLock, Semaphore, CountDownLatch,ThreadPoolExecutor中都有一個內部類實現了AQS

子類必須實現下面這幾個方法
上面兩個用於獨占式, 下面兩個用於共享式

ReentrantLock

靜態內部類實現了AQS, 對象本身持有aqs的實現。多線程操作lock (get release)時, 父類AQS中統計狀態也會改變, 以達到鎖的線程安全性


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM