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中統計狀態也會改變, 以達到鎖的線程安全性