AQS,Abstract Queue Synchronizer,抽象队列同步器,它是java.util.concurrent
包中的核心组件之一, 它提供了一个基于FIFO队列、可以用于构建锁或者其他同步装置的基础框架。该类提供了一个int
型的变量state
来表示状态,它是实现大部分同步需求的基础
线程1和线程2同时执行:先取State变量-> 执行原子操作CAS -> 失败后进入队列等待 -> 释放锁后唤醒
非公平锁:如果线程1执行完毕后,去唤醒线程2.当线程2开始执行时,线程3也在执行,并且加锁成功。线程2发现已经加锁继续在等待队列中等待
公平锁:不管哪个线程谁先执行,优先在AQS中的等待队列中查看是否有其他队列,如果没有则执行,否则进入等待队列等待