文章 62
浏览 15135
AQS

AQS

队列同步器 AQS 从 AQS 的类名称和修饰上来看,这是⼀个抽象类,所以从设计模式的⻆度来看同步器⼀定是基于【模版模式】来 设计的,使⽤者需要继承同步器,实现⾃定义同步器,并重写指定⽅法,随后将同步器组合在⾃定义的同步组件 中,并调⽤同步器的模版⽅法,⽽这些模版⽅法⼜回调⽤使⽤者重写的⽅法 我不想将上⾯的解释说的这么抽象,其实想理解上⾯这句话,我们只需要知道下⾯两个问题就好了 哪些是⾃定义同步器可重写的⽅法? 哪些是抽象同步器提供的模版⽅法? 同步器可重写的⽅法 同步器提供的可重写⽅法只有5个,这⼤⼤⽅便了锁的使⽤者: 表格⽅法描述中所说的 同步状态 就是上⽂提到的有 volatile 修饰的 state,所以我们在 重写 上⾯⼏个⽅法时,还 要通过同步器提供的下⾯三个⽅法(AQS 提供的)来获取或修改同步状态: ⽽独占式和共享式操作 state 变量的区别也就很简单了 同步器提供的模版⽅法 总结 AQS实现分析 有阻塞就需要排队,实现排队必然需要队列 CLH:Craig、Landin and Hagersten 队列,是⼀个单向链表,AQS中的队列是CLH变体的虚拟双向队列 队列中....

人民有信仰 民族有希望 国家有力量