AQS(AbstractQueuedSynchronizer)主要用于對資源狀的態(tài)管理及等待隊列的調(diào)度禀忆。資源的狀態(tài)可分為:空閑、獨占、共享3種哈踱;鎖競爭模式可分為:公平鎖和非公平鎖2種。
其核心思想為:請求成功則修改資源的鎖定狀態(tài)梨熙,請求失敗則放入等待隊列等候調(diào)度开镣。
當(dāng)資源為空閑時狀態(tài)時的處理比較簡單,可被直接直接獲取并修改狀態(tài)咽扇;
當(dāng)資源為共享時狀態(tài)時邪财,要根據(jù)共享條件(如共享數(shù)量上限等)判定是否可獲取資源,如果失敗則根據(jù)鎖模式進行嘗試或者進入等待质欲;
當(dāng)資源為獨占時树埠,直接根據(jù)鎖模式進行嘗試或者進入等待;
不同鎖模式下的競爭:
非公平鎖:先嘗試請求一定次數(shù)嘶伟,失敗后放入等待隊列怎憋;
公平鎖:如果等待隊列為空,先嘗試請求一定次數(shù)九昧,失敗后放入等待隊列绊袋;否則直接放入等待隊列赠橙;
當(dāng)資源使用完成后,需要釋放對應(yīng)的鎖狀態(tài)愤炸,以便等待隊列或新建請求獲取資源期揪。AQS一般只需實現(xiàn)獨占或共享中的一種模式。
2022-05-15