AQS,AbstractQueuedSynchronizer,抽象的队列式的同步器,其定义了一套多线程访问共享资源的同步器框架。
AQS是基于CLH队列,用volatile修饰共享变量state,线程通过CAS去改变状态符,成功则获取锁成功,失败则进入等待队列,等待被唤醒。
AQS的核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态,如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。
实现了AQS的锁有:自旋锁、互斥锁、读锁写锁、条件产量、信号量、栅栏都是AQS的衍生物
补充:
1.CLH(Craig,Landin,and Hagersten)队列是一个虚拟的双向队列,虚拟的双向队列即不存在队列实例,仅存在节点之间的关联关系。
2.volatile关键字
a).保障线程可见性
b).禁止指令重排序优化
3.外围知识补充
不同线程是运行在不同CPU的
线程是cpu执行的基本单位
进程是cpu分配资源的基本单位
超线程:一个ALU对应多个PC或Registers,所谓四核八线程