zoukankan      html  css  js  c++  java
  • 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中统计状态也会改变, 以达到锁的线程安全性

  • 相关阅读:
    scnner02 (nextLine)
    Scanner01
    Spring 框架 (初学)
    查询自己写了多少行代码
    jdbc事务
    jdbc(预编译插入数据)
    jdbc(java连接数据库)
    监听器扩展
    listener(监听器)
    Filter过滤器
  • 原文地址:https://www.cnblogs.com/yszzu/p/10198904.html
Copyright © 2011-2022 走看看