AQS鎖的原理
aqs原理:是一個(gè)用于構(gòu)建鎖和同步器的框架,它能降低構(gòu)建鎖和同步器的工作量,還可以避免處理多個(gè)位置上發(fā)生的競(jìng)爭(zhēng)問(wèn)題,在基于AQS構(gòu)建的同步器中,只可能在一個(gè)時(shí)刻發(fā)生阻塞,從而降低上下文切換的開銷,并提高吞吐量。
通過(guò)status標(biāo)識(shí)鎖 ReentrantLock使用排他鎖。AQS的status0表示加鎖,thread是當(dāng)前獲取鎖的線程。該鎖時(shí)可重入鎖,所以status0。CountDownLatch 使用共享鎖。
它繼承了AQS框架的內(nèi)部類,實(shí)現(xiàn)了插銷式同步器的具體功能。在Sync類內(nèi)部,有兩個(gè)重要的內(nèi)部類NonfairSync和FairSync,它們分別實(shí)現(xiàn)了非公平鎖和公平鎖的具體實(shí)現(xiàn)。
首先嘗試獲取資源,如果當(dāng)前狀態(tài)為0,表示沒(méi)有線程占有鎖,設(shè)置該線程為獨(dú)占模式,使用CAS設(shè)置狀態(tài),否則如果當(dāng)前線程和獨(dú)占線程是一個(gè)線程,修改狀態(tài)值,否則返回false。
當(dāng)?shù)谝淮握{(diào)用await()對(duì)線程進(jìn)行阻塞時(shí),當(dāng)前線程會(huì)首先調(diào)用park()進(jìn)入阻塞,并且加入到條件等待隊(duì)列中。當(dāng)某個(gè)線程調(diào)用此Condition對(duì)象的signal時(shí),等待隊(duì)列中的firstWaiter(第一個(gè)阻塞對(duì)象)會(huì)被加入到AQS鎖的CLH隊(duì)列中。
>>點(diǎn)擊查看今日優(yōu)惠<<