zoukankan      html  css  js  c++  java
  • AQS: 什么是AQS?

    AQS定义了一套多线程访问共享资源的同步器框架. 许多同步类实现都依赖于它,如常用的ReentrantLock/ReentrantReadWriterLock/CountDownLatch
    这些类里面都维护了一套aqs的子类,利用子类实现的功能。该队列里面维护的是一堆线程节点。
    核心思想是当前线程获取锁的时候如果失败了,就被加入到阻塞队列中(fifo双向队列)配合锁一起使用的。
    主要关注getstate().setstate(),compareandsetstate(int expect,int update)
    当状态值为0的时候说明没有线程获取锁,否则有线程获取锁,在此当中在判断是不是当前线程,(可重入锁的特性)
    可重入锁可以设置公平锁和非公平锁,
    非公平锁需要进行2次的cas然后在进入队列,公平锁是看一下对列里面是否有排队的线程,有的话直接添加到队列的尾部排队。
    CountDownLatch 调用 await() 方法时,先去获取 state 的值,当计数器不为0的时候,说明还有需要等待的线程在运行,则调用 doAcquireSharedInterruptibly 方法,进来执行的第一个动作就是尝试加入等待队列 ,即调用 addWaiter()方法,await() 方法是线程阻塞,直到计数器为0,才会启动;

    如何设置和怎么实现的参见:https://zhuanlan.zhihu.com/p/45305463;

    参照:https://www.cnblogs.com/waterystone/p/4920797.html;http://ifeve.com/java-special-troops-aqs/

    总结:aqs理解原理就行了,因为了它与锁的结合已经帮我们默认实现了内部机制,无需关心它。

  • 相关阅读:
    JS递归状态回退
    JS中自定义迭代协议
    深入浅出解析cookie与session
    node.js哲学与核心原理
    深入解析canvas画布游戏机制
    final关键字用法
    static关键字用法
    四:Java设计模式之单例模式
    三:java设计模式之工厂模式
    IntelliJ IDEA 设置Java开发自动格式化
  • 原文地址:https://www.cnblogs.com/ljy-skill/p/11073505.html
Copyright © 2011-2022 走看看