如何淺析Java并發(fā)工具類在AQS實(shí)現(xiàn)-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(guān)如何淺析Java并發(fā)工具類在AQS實(shí)現(xiàn),小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元林甸做網(wǎng)站,已為上家服務(wù),為林甸各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

眾所周知,AQS是一個(gè)Java提高的底層同步工具類。本文就AQS的資源共享方式,state的作用,自定義同步器的方法,CountDownLatch,Semaphore,Semaphore和RateLimiter的區(qū)別,CyclicBarrier幾方面來為大家淺析Java并發(fā)工具類。 

AQS維護(hù)了一個(gè)volatile int state(代表共享資源)和一個(gè)FIFO線程等待隊(duì)列(多線程爭(zhēng)用資源被阻塞時(shí)會(huì)進(jìn)入此隊(duì)列),用于后續(xù)的調(diào)度。此外還可能有一個(gè)或者多個(gè)的Condition單向鏈表,用于Condition的處理,這個(gè)單向鏈表不是必須的,可能不存在。

1、AQS的資源共享方式

Exclusive(獨(dú)占,只有一個(gè)線程能執(zhí)行,如ReentrantLock)

Share(共享,多個(gè)線程可同時(shí)執(zhí)行,如Semaphore/CountDownLatch)

2、state的作用

以ReentrantLock為例,state初始化為0,表示未鎖定狀態(tài)。A線程lock()時(shí),會(huì)調(diào)用tryAcquire()獨(dú)占該鎖并將state+1。此后,其他線程再tryAcquire()時(shí)就會(huì)失敗,直到A線程unlock()到state=0(即釋放鎖)為止,其它線程才有機(jī)會(huì)獲取該鎖。當(dāng)然,釋放鎖之前,A線程自己是可以重復(fù)獲取此鎖的(state會(huì)累加),這就是可重入的概念。但要注意,獲取多少次就要釋放多少次,這樣才能保證state能回到零狀態(tài)。

以CountDownLatch以例,任務(wù)分為N個(gè)子線程去執(zhí)行,state也初始化為N(注意N要與線程個(gè)數(shù)一致)。這N個(gè)子線程是并行執(zhí)行的,每個(gè)子線程執(zhí)行完后countDown()一次,state會(huì)CAS減1。等到所有子線程都執(zhí)行完后(即state=0),會(huì)unpark()調(diào)用主線程,然后調(diào)用主線程就會(huì)從await()函數(shù)返回,繼續(xù)后續(xù)動(dòng)作。

3、自定義同步器的方法

具體線程等待隊(duì)列的維護(hù)(如獲取資源失敗入隊(duì)/喚醒出隊(duì)等),AQS已經(jīng)在頂層實(shí)現(xiàn)好了。自定義同步器實(shí)現(xiàn)時(shí)主要實(shí)現(xiàn)以下幾種方法:

isHeldExclusively():該線程是否正在獨(dú)占資源。只有用到condition才需要去實(shí)現(xiàn)它。

tryAcquire(int):獨(dú)占方式。嘗試獲取資源,成功則返回true,失敗則返回false。

tryRelease(int):獨(dú)占方式。嘗試釋放資源,成功則返回true,失敗則返回false。

tryAcquireShared(int):共享方式。嘗試獲取資源。負(fù)數(shù)表示失敗;0表示成功,但沒有剩余可用資源;正數(shù)表示成功,且有剩余資源。

tryReleaseShared(int):共享方式。嘗試釋放資源,如果釋放后允許喚醒后續(xù)等待結(jié)點(diǎn)返回true,否則返回false。

4、CountDownLatch

CountDownLatch是通過一個(gè)計(jì)數(shù)器來實(shí)現(xiàn)的,計(jì)數(shù)器的初始值為線程的數(shù)量。每當(dāng)一個(gè)線程完成了自己的任務(wù)后,計(jì)數(shù)器的值就會(huì)減1。當(dāng)計(jì)數(shù)器值到達(dá)0時(shí),它表示所有的線程已經(jīng)完成了任務(wù),然后等待的線程就可以恢復(fù)執(zhí)行任務(wù)。

常見運(yùn)用場(chǎng)景

多線程做資源初始化,主線程先暫停等待初始化結(jié)束;每個(gè)線程初始化結(jié)束后都countDown一次,等全部線程都初始化結(jié)束后(state=0),此時(shí)主線程再繼續(xù)往下執(zhí)行

5、Semaphore

Semaphore可以控制某個(gè)資源可被同時(shí)訪問的個(gè)數(shù),通過acquire()獲取一個(gè)許可,如果沒有就等待,而release() 釋放一個(gè)許可。單個(gè)信號(hào)量的Semaphore對(duì)象可以實(shí)現(xiàn)互斥鎖的功能,并且可以是由一個(gè)線程獲得了“鎖”,再由另一個(gè)線程釋放“鎖”,這可應(yīng)用于死鎖恢復(fù)的一些場(chǎng)合。

常見應(yīng)用場(chǎng)景

Semaphore可以用來做流量控制,限制可以訪問某些資源(物理或邏輯的),特別公用資源有限的應(yīng)用場(chǎng)景,比如數(shù)據(jù)庫(kù)連接。

6、Semaphore和RateLimiter的區(qū)別

Semaphore:作用是限定只有搶到信號(hào)的線程才能執(zhí)行,其他的都得等待。你可以設(shè)置N個(gè)信號(hào),這樣最多可以有N個(gè)線程同時(shí)執(zhí)行。注意,其他的線程只是掛起了,是通過限制線程個(gè)數(shù)來進(jìn)行限流。

RateLimiter:Guava的限流工具類,基于令牌桶算法實(shí)現(xiàn)。作用是 限制一秒內(nèi)只能有N個(gè)線程執(zhí)行,超過了就只能等待下一秒。注意,N是double類型。是從速率來進(jìn)行限流。

7、CyclicBarrier

CyclicBarrier可以使一定數(shù)量的線程反復(fù)地在柵欄位置處匯集。當(dāng)線程到達(dá)柵欄位置時(shí)將調(diào)用await方法,這個(gè)方法將阻塞直到所有線程都到達(dá)柵欄位置。如果所有線程都到達(dá)柵欄位置,那么柵欄將打開,此時(shí)所有的線程都將被釋放,而柵欄將會(huì)重置為原來的計(jì)數(shù)以便下次使用。

常見應(yīng)用場(chǎng)景

用于多線程計(jì)算數(shù)據(jù),最后合并計(jì)算結(jié)果的場(chǎng)景。每個(gè)parter負(fù)責(zé)一部分計(jì)算,最后進(jìn)行數(shù)據(jù)匯總。

以上就是如何淺析Java并發(fā)工具類在AQS實(shí)現(xiàn),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前文章:如何淺析Java并發(fā)工具類在AQS實(shí)現(xiàn)-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://bm7419.com/article10/hsjgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、ChatGPT、網(wǎng)站導(dǎo)航、手機(jī)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站建設(shè)

廣告

聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)