CountDownLatch類的分析

2021-09-27 06:53:33 字數 888 閱讀 9243

countdownlatch:實現 乙個或多個執行緒 等待 其他一組執行緒的操作執行完成。

1、內部類:sync extends abstractqueuedsynchronizer ,

繼承了aqs,並實現了tryacquireshared,tryreleaseshared方法,同時擁有構造方法:

sync(int count)

2、屬性:

private final sync sync;

countdownlatch建構函式,會設定該屬性

3、方法:

1)public countdownlatch(int count)

建構函式

2)public void await()

阻塞當前執行緒,等待 一組執行緒執行完成(其實就是等待count=0),當count = 0時,才能喚醒該執行緒,喚醒操作在countdown方法邏輯裡。

3)public boolean await(long timeout, timeunit unit)

同await方法,只是增加了超時時間

4)public void countdown()

執行count-1,當count減到0的時候,就會迴圈喚醒其他阻塞等待的執行緒。

5)public long getcount()

獲取count值,

4、實現原理:

使用了abstractqueuedsynchronizer類來實現執行緒鎖的操作。實現步驟:

1)建構函式初始化sync,並將state設定為該數量。

2)當呼叫await時,新建share節點,入佇列,並阻塞當前執行緒,直到被其他執行緒喚醒。

3)當呼叫countdown時,如果state被減為0了,則統一去喚醒還在排隊等待喚醒的執行緒(即調過await方法的執行緒)

CountDownLatch工具類介紹

countdownlatch是乙個同步工具類,它允許乙個或多個執行緒處於等待狀態直到在其它執行緒中執行的一組操作完成為止。countdownlatch用乙個給定的計數來實現初始化。await方法會一直處於阻塞狀態,直到countdown方法呼叫而使當前計數達到零。當計數為零之後,所有處於等待的執行緒...

同步輔助類CountDownLatch

問題 前段時間寫乙個多執行緒的爬蟲程式,要求在所有爬蟲執行緒執行結束後,執行資料庫插入操作。所以就要知道那些爬蟲執行緒什麼時候能夠全部停止。解決 1 按照以往的我的寫法,我習慣用thread類的activecount 方法,這個方法能夠返回當前執行緒組裡活動執行緒的數量。比如我開5個執行緒,加上主線...

類CountDownLatch的使用

允許乙個或多個執行緒等待,直到在其他執行緒中執行的一組操作完成為止。乙個countdownlatch初始化為給定數。該await方法將阻塞,直到由於該countdown 方法的呼叫導致當前計數達到零為止,此後所有等待執行緒都被釋放,並且隨後的任何awaitreturn 呼叫都將立即釋放 這是一種一次...