AQS 其实是个抽象模板工具类,从AQS出发衍生出很多工具类,但基于AQS的直接子类包括
可重入锁和读写锁,JAVA1.8 后又加入了邮戳锁。
AQS 是一些列高并发锁的统称,其产生原因是当并发增加到一定程度时,自旋锁会产生严重问题,比如CPU飙升甚至死机。这是因为现代的CPU都是多核的,自旋锁的含义是死循环不断的查询和尝试锁,循环执行加锁代码,这样会导致线程全部进入死循环。从而导致系统的主宰CPU被耗尽,当然在并发量一般时一般不会如此。
AQS就是解决这类问题的。解决方法非常简单就是排队。线程尝试锁失败就停止自旋,然后排队,这样就不会将CPU困在死循环里面了。AQS将队列分成两个,一个是抢占锁的队列,即同步队列,一个是条件队列,条件队列里面的线程只有等到某个事件发生时才会转移到同步队列,等待获取锁。
AQS 具体源码分析请参考博主录制的分析视频:https://edu.51cto.com/course/28587.html