Java并发系列-AQS源码学习
目录 AQS框架学习 Node节点 等待队列 独占模式 共享模式 小结: AQS框架学习 Node节点 状态表示 cancelled:表明当前线程已经放弃锁 signal:表明当前线程正在运行,它后面的线程等着被它唤醒 condition:表明当前线程正在有条件的等待 propagate:表示下一次共享状态获取将会传递给后继结点获取这个共享同步状态。 两种模式 SHARED ,共享模式,一个空的Node对象 EXCLUSIVE,独占模式,直接是null 等待队列 AQS提供一个等待队列,该队列是一个双向链表结构,用来接收为获取到锁的线程所生成的node,该队列的head和tail都是同一个空的Node实例,并且都是懒加载。该队列所有的操作都是基于CAS的,所以可以保证线程安全性,每次添加新的node节点都是添加在链表的尾部。 独占模式 获取锁 如果获取锁失败且将当前线程添加到等待队列失败,则中断当前线程,代码如下: 当然,尝试获取锁在AQS框架里是一个抽象方法,让其子类来实现。独占模式下,Node节点的nextWaiter为null,在将当前线程添加到队列时,需要检查队列是不是还没有初始化。如果队列是有效的,则将当前线程所生成的节点添加到队列的尾部。当当前线程所生成的node节点处于排队期的时候,当前线程就开始以独占形式进行自旋去不断地尝试获取锁,因为尝试获取锁是在排队之前执行的