Java之AQS-創(chuàng)新互聯(lián)

AQS是什么

是用來(lái)實(shí)現(xiàn)鎖或者其它同步器組件的公共基礎(chǔ)部分的抽象實(shí)現(xiàn),整體就是一個(gè)抽象的FIFO隊(duì)列來(lái)完成資源獲取線程的安排工作,并通過(guò)一個(gè)int類(lèi)變量表示持有鎖的狀態(tài)。
在這里插入圖片描述
在這里插入圖片描述

創(chuàng)新互聯(lián)公司成立以來(lái)不斷整合自身及行業(yè)資源、不斷突破觀念以使企業(yè)策略得到完善和成熟,建立了一套“以技術(shù)為基點(diǎn),以客戶需求中心、市場(chǎng)為導(dǎo)向”的快速反應(yīng)體系。對(duì)公司的主營(yíng)項(xiàng)目,如中高端企業(yè)網(wǎng)站企劃 / 設(shè)計(jì)、行業(yè) / 企業(yè)門(mén)戶設(shè)計(jì)推廣、行業(yè)門(mén)戶平臺(tái)運(yùn)營(yíng)、成都App制作、手機(jī)網(wǎng)站制作、微信網(wǎng)站制作、軟件開(kāi)發(fā)、內(nèi)江機(jī)房主機(jī)托管等實(shí)行標(biāo)準(zhǔn)化操作,讓客戶可以直觀的預(yù)知到從創(chuàng)新互聯(lián)公司可以獲得的服務(wù)效果。使用到AQS的一些類(lèi)

在這里插入圖片描述
ReentranLock:
在這里插入圖片描述
CountDownLatch
在這里插入圖片描述
ReentrantReadWriteLock:
在這里插入圖片描述
Semaphore
在這里插入圖片描述

搶到資源的線程直接使用處理業(yè)務(wù),搶不到資源的必然涉及一種排隊(duì)等候機(jī)制。搶占資源失敗的線程繼續(xù)去等待(類(lèi)似銀行業(yè)務(wù)辦理窗口都滿了,暫時(shí)沒(méi)有受理窗口的顧客只能去候客區(qū)排隊(duì)等候),但等候線程仍然保留獲取鎖的可能且獲取鎖流程仍在繼續(xù)(候客區(qū)的顧客也在等著叫號(hào),輪到了再去受理窗口辦理業(yè)務(wù))
如果共享資源被占用,就需要一定的阻塞等待喚醒機(jī)制來(lái)保證鎖分配。這個(gè)機(jī)制主要用的是CLH隊(duì)列的變體實(shí)現(xiàn)的,將暫時(shí)獲取不到的鎖的線程加入到隊(duì)列中,這個(gè)隊(duì)列就是AQS同步隊(duì)列的抽象表現(xiàn)。它將要請(qǐng)求共享資源的線程及自身的等待狀態(tài)封裝成隊(duì)列的結(jié)點(diǎn)對(duì)象(Node),通過(guò)CAS、自旋以及LockSupport.park()的方式,維護(hù)state變量的狀態(tài),使并發(fā)達(dá)到同步的效果。

源碼說(shuō)明:

在這里插入圖片描述

AQS同步隊(duì)列的基本結(jié)構(gòu):

在這里插入圖片描述
在這里插入圖片描述

AQS內(nèi)部體系結(jié)構(gòu)

在這里插入圖片描述

AQS的內(nèi)部類(lèi)Node中的屬性說(shuō)明

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

從ReentrantLock解讀AQS的源碼:

在這里插入圖片描述

第一步:
在這里插入圖片描述

第二步:創(chuàng)建的是公平鎖還是非公平鎖
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

第三:以非公平鎖ReentrantLock()為例作為突破走起,方法lock()
對(duì)比公平鎖和非公平鎖的tryAcquire()方法的實(shí)現(xiàn)代碼,其實(shí)差別就在于非公平鎖獲取鎖時(shí)公平鎖中少了一個(gè)判斷!hasQueuedPredecessors(),此方法中判斷了是否需要排隊(duì),導(dǎo)致公平鎖和非公平鎖的差異如下:
公平鎖:公平鎖講究先來(lái)先到,線程在獲取鎖時(shí),如果這個(gè)鎖的等待隊(duì)列中已經(jīng)有線程在等待,那么當(dāng)前線程就會(huì)進(jìn)入等待隊(duì)列中;
非公平鎖:不管是否有等待隊(duì)列,如果可以獲取鎖,則立刻占有鎖對(duì)象。也就是說(shuō)隊(duì)列的第一個(gè)排隊(duì)線程蘇醒后,不一定就是排頭的這個(gè)線程獲得鎖,它還是需要參加競(jìng)爭(zhēng)鎖(存在線程競(jìng)爭(zhēng)的情況下),后來(lái)的線程可能不講武德插隊(duì)奪鎖了。
在這里插入圖片描述
第四:線程使用lock方法來(lái)加鎖
以下截圖為非公平鎖的
在這里插入圖片描述
第五:acquire()方法
在這里插入圖片描述
第六:tryAcquire方法
在這里插入圖片描述
第六,如果線程使用nonfairTryAcquire方法搶占資源失敗,則使用addWaiter方法將線程加入等待隊(duì)列
在這里插入圖片描述
在這里插入圖片描述
第一次調(diào)用enq方法之后會(huì)形成以下的樣子:
在這里插入圖片描述
第七:acquireQueued()方法
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
第八:使用unlock方法來(lái)釋放鎖
在這里插入圖片描述
在這里插入圖片描述
隊(duì)列中喚醒的線程再去搶占鎖

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站標(biāo)題:Java之AQS-創(chuàng)新互聯(lián)
文章來(lái)源:http://bm7419.com/article46/ggseg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、微信小程序網(wǎng)站策劃、自適應(yīng)網(wǎng)站、品牌網(wǎng)站制作網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)