今天依舊是吹爆lau哥的一天~
眾所周知(客套一下),AQS是使用了同步隊列+條件隊列來實現鎖機制的。
那么為什么要使用兩個隊列呢?
我看着AQS的源碼看了兩天多,記了這里忘了那里,會了這里懵了那里,最后看完了,腦袋漿糊了。
然后去問大佬。
大佬做了個簡單的比喻。(下面是轉述,不是大佬的原話,原話更加清晰,只可惜公司電腦與手機無法溝通,所以我轉述一下)
說這個機制就像是上廁所,大家都在排隊上廁所,但是坑就只有一個,每個人都在自旋,判斷自己是不是第一個,如果是第一個就去嘗試獲得廁所的使用權,當正在上廁所的人上完了,釋放廁所使用權,那么他就可以進去,然后下一個變成第一個,等待。這段就是同步隊列的基本邏輯。
但是上廁所也有大號小號,所以廁所管理員會把不那么急切的上小號的人放到條件隊列里面去。當急切的人上完了,再把他們移轉導同步隊列去,按照之前的邏輯進行獲取。
坑==資源
大號排隊==同步隊列
小號排隊==條件隊列
