AQS双队列作用

今天依旧是吹爆lau哥的一天~

众所周知(客套一下),AQS是使用了同步队列+条件队列来实现锁机制的。

那么为什么要使用两个队列呢?

我看着AQS的源码看了两天多,记了这里忘了那里,会了这里懵了那里,最后看完了,脑袋浆糊了。

然后去问大佬。

大佬做了个简单的比喻。(下面是转述,不是大佬的原话,原话更加清晰,只可惜公司电脑与手机无法沟通,所以我转述一下)

说这个机制就像是上厕所,大家都在排队上厕所,但是坑就只有一个,每个人都在自旋,判断自己是不是第一个,如果是第一个就去尝试获得厕所的使用权,当正在上厕所的人上完了,释放厕所使用权,那么他就可以进去,然后下一个变成第一个,等待。这段就是同步队列的基本逻辑。

但是上厕所也有大号小号,所以厕所管理员会把不那么急切的上小号的人放到条件队列里面去。当急切的人上完了,再把他们移转导同步队列去,按照之前的逻辑进行获取。

坑==资源

大号排队==同步队列

小号排队==条件队列

原文地址:https://www.cnblogs.com/hekiraku/p/11983093.html