latch翻譯成中文_LATCH是啥意思
一、簡介
CountDownLatch是線程同步輔助類,使用這個輔助類可以讓線程等待其他線程完成一組操作后才能執(zhí)行,否則一直等待。
二、大致原理
構(gòu)造器采取一個整數(shù)來初始化等待其他線程的數(shù)量,使用await()方法讓線程開始等待其他線程執(zhí)行完畢,每一個線程執(zhí)行完成后需調(diào)用countDown()方法,這個方法會讓計數(shù)器-1(AQS的state),當(dāng)計數(shù)器為0的時候,CountDownLatch類將喚醒所有調(diào)用await()方法的線程。 其實就是初始化state=n,然后每次countDown都調(diào)用release方法進行-1。這些都是aqs的知識,早就講過了。
三、Demo
1、需求
完成這樣的一個需求,大家視頻會議,一共10個人,都到齊了后就開始視頻會議,沒到齊的話領(lǐng)導(dǎo)(主線程)是不會講話的。
2、源碼
3、輸出結(jié)果
4、結(jié)果分析
- 首先輸出等待人數(shù):10
- 然后進入await(),代表著進入WAITING狀態(tài),等待其他10個線程都完事后才會叫醒此線程
- 每次只需countDown都代表著線程執(zhí)行完畢1次。
- ...
- 最后輸出還有0人沒到,這時候代表其他線程都執(zhí)行完畢,會喚醒所有調(diào)用await()方法的線程
- 輸出人都來全了,我們開始開會...
四、應(yīng)用場景
1、比如對于馬拉松比賽,進行排名計算,參賽者的排名,肯定是跑完比賽之后,進行計算得出的,翻譯成Java識別的預(yù)發(fā),就是N個線程執(zhí)行操作,主線程等到N個子線程執(zhí)行完畢之后,在繼續(xù)往下執(zhí)行。2、也可以作為系統(tǒng)資源的有效回收,比如N個線程在操作文件,操作完成后主線程進行文件整理等操作
五、源碼解讀
1、類架構(gòu)
2、構(gòu)造器
3、await()方法
4、countDown()方法