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理解原理就行了,因为了它与锁的结合已经帮我们默认实现了内部机制,无需关心它。

  • 相关阅读:
    数组定义和使用
    跳转语句—break,continue,goto
    案例 天线抬不起头来
    int是几位;short是几位;long是几位 负数怎么表示
    Python3的类注意事项
    用usb线配置直流电机驱动器不能配置成功
    案例 电源灯亮,但是就是不闪灯,而且也下载不了程序
    关于ai算法的一个点子
    进程 并发 线程 032
    ftp功能深度剖析 + 线程 031
  • 原文地址:https://www.cnblogs.com/ljy-skill/p/11073505.html
Copyright © 2011-2022 走看看