例如 ReentrantLock骆捧、CountDownLatch、CycleBarrier 底層都是通過AQS來實現(xiàn)的
AQS的核心思想:如果被請求的共享資源空閑全肮,則將當前請求的資源的線程設置為有效的工作線程册舞,并將共享資源設置為鎖定狀態(tài)播演,如果被請求的共享資源被占用趾代,那么就需要一套線程阻塞等待以及喚醒時鎖分配的機制贯底,這個AQS是用CLH隊列鎖實現(xiàn)的,即將暫時獲取不到的鎖的線程加入到隊列中撒强。CLH隊列是一個虛擬的雙向隊列禽捆,虛擬的雙向隊列即不存在隊列的實例,僅存在節(jié)點之間的關聯(lián)關系飘哨。
AQS是將每一條請求共享資源的線程封裝成一個CLH鎖隊列的一個結點(Node)胚想,來實現(xiàn)鎖的分配
用大白話來說,AQS就是基于CLH隊列芽隆,用volatile修飾共享變量state浊服,線程通過CAS去改變狀態(tài)符,成功則獲取鎖成功胚吁,失敗則進入等待隊列牙躺,同時等待被喚醒。
注意:AQS是自旋鎖囤采,在等待喚醒的時候述呐,經常會使用自旋的方式,不斷的嘗試獲取鎖蕉毯,直到被其它線程獲取成功
實現(xiàn)了AQS的鎖有:自旋鎖、互斥鎖思犁、讀寫鎖代虾、條件變量、信號量激蹲、柵欄都是AQS的衍生物