AQS到底是个什么东西???
在家自学java并发编程的艺术,晦涩难懂,看到aqs的时候每个字都读懂了,看完之后完全不知道在说啥,大脑一片空白。今天拿起书本索性又看了几遍,有了点感悟,分享给大家!!!
**要我个人理解就是一个用来构建自己的锁的jdk提供的框架。**如果你想构建自己的锁,你就定义一个类来继承AbstractQueuedSynchronizer实现它提供的方法就行了。
下面是aqs提供的方法大致三类:独占式获取与释放同步状态、共享式获取与释放,同步状态和查询同步队列中的等待线程情况
aqs的实现分析
主要包括:同步队列、独占式同步状态获取与释放、共享式同步状态获取与释放以及超时获取同步状态等同步器的核心数据结构与模板方法。
1.同步队列
同步器依赖内部的同步队列(一个FIFO双向队列)来完成同步状态的管理,当前线程获取同步状态失败时,同步器会将当前线程以及等待状态等信息构造成为一个节点(Node)并将其加入同步队列,同时会阻塞当前线程,当同步状态释放时,会把首节点中的线程唤醒,使其再次尝试获取同步状态。