cas aqs lock之间的关系

时间:2025-02-01 11:05:50

CAS

  对应cpu的硬件指令, 是最原始的原子操作

  cas主要是在AtomicInteger   AtomicXXX类中使用, 用于实现线程安全的自增操作 ++.  对应一个unsafe对象, 根据os平台的不同,操作cpu指令c++代码有少许不同

   compareAndSetState(int expect, int update)   在当前值==expect时,变更为update值

AQS

全称是AbstractQueuedSynchronizer, 它是基于cas的锁同步框架,这个类是抽象的,其中有1个状态统计变量stateOffset是使用cas来操作的,

具体实现类都使用这个状态变量,达到各自锁的操作 @see 《JAVA并发编程实践》

cas aqs lock之间的关系

下图中可以看到ReentrantLock, ReentrantReadWriteLock, Semaphore, CountDownLatch,ThreadPoolExecutor中都有一个内部类实现了AQS

cas aqs lock之间的关系

子类必须实现下面这几个方法

上面两个用于独占式, 下面两个用于共享式

cas aqs lock之间的关系

ReentrantLock

静态内部类实现了AQS, 对象本身持有aqs的实现。多线程操作lock (get release)时, 父类AQS中统计状态也会改变, 以达到锁的线程安全性