允許乙個或多個執行緒等待,直到在其他執行緒中執行的一組操作完成為止。
乙個countdownlatch初始化為給定數。該await方法將阻塞,直到由於該countdown()方法的呼叫導致當前計數達到零為止,此後所有等待執行緒都被釋放,並且隨後的任何awaitreturn 呼叫都將立即釋放 。這是一種一次性現象-無法重置計數。如果您需要用於重置計數的版本,請考慮使用cyclicbarrier。
//執行緒類
public
class
getdatastatusthread
extends
thread
@override
public
void
run(
)}
//呼叫類
public
class
countdownlatchdemo
//用await來阻礙所有的執行緒,知道countdownlatch指定的執行緒個數執行完成
countdownlatch.
await()
; system.out.
println
("所有執行緒都執行完成");
}}
結果分析:
1.注釋掉countdownlatch.
await()
;的執行結果
所有執行緒都執行完成
執行緒【thread-
0】獲取狀態成功!
執行緒【thread-
1】獲取狀態成功!
countdown個數:1
執行緒【thread-
2】獲取狀態成功!
countdown個數:0
countdown個數:2
分析:主線程和三個併發執行緒一起執行,所有主線程可能先執行。所以主線程的列印在前面。
2.不注釋掉countdownlatch.
await()
;的執行結果
執行緒【thread-
0】獲取狀態成功!
countdown個數:2
執行緒【thread-
2】獲取狀態成功!
countdown個數:1
執行緒【thread-
1】獲取狀態成功!
countdown個數:0
所有執行緒都執行完成
分析:主線程和三個併發執行緒一起執行,但是使用了await
()方法,阻塞了主線程,直到countdownlatch的值減少到0,才能執行,所以主線程的列印在最後執行。
適用於一組執行緒都執行完畢後,其他執行緒才能執行的情況。 CountDownLatch工具類介紹
countdownlatch是乙個同步工具類,它允許乙個或多個執行緒處於等待狀態直到在其它執行緒中執行的一組操作完成為止。countdownlatch用乙個給定的計數來實現初始化。await方法會一直處於阻塞狀態,直到countdown方法呼叫而使當前計數達到零。當計數為零之後,所有處於等待的執行緒...
同步輔助類CountDownLatch
問題 前段時間寫乙個多執行緒的爬蟲程式,要求在所有爬蟲執行緒執行結束後,執行資料庫插入操作。所以就要知道那些爬蟲執行緒什麼時候能夠全部停止。解決 1 按照以往的我的寫法,我習慣用thread類的activecount 方法,這個方法能夠返回當前執行緒組裡活動執行緒的數量。比如我開5個執行緒,加上主線...
CountDownLatch類的分析
countdownlatch 實現 乙個或多個執行緒 等待 其他一組執行緒的操作執行完成。1 內部類 sync extends abstractqueuedsynchronizer 繼承了aqs,並實現了tryacquireshared,tryreleaseshared方法,同時擁有構造方法 syn...