同步工具類 CountDownLatch

2022-09-20 11:48:16 字數 967 閱讀 8633

countdownlatch是乙個同步工具類,它允許乙個或多個執行緒一直等待,直到其他執行緒執行完後再執行。例如,應用程式的主線程希望在負責啟動框架服務的執行緒已經啟動所有框架服務之後執行。

countdownlatch是通過乙個計數器來實現的,計數器的初始化值為執行緒的數量。每當乙個執行緒完成了自己的任務後,計數器的值就相應得減1。當計數器到達0時,表示所有的執行緒都已完成任務,然後在閉鎖上等待的執行緒就可以恢復執行任務。 

子執行緒等待主線程處理完畢開始處理,子執行緒處理完畢後,主線程輸出。

class myrunnable implements runnable 

@override

public void run() catch (interruptedexception e) }}

public static void main(string args) throws interruptedexception 

system.out.println("主線程處理自己事情");

thread.sleep(3000);

countdownlatch.countdown();

system.out.println("主線程處理結束");

await.await();

system.out.println("子執行緒處理完畢啦");

}

場景一:將任務分割成多個子任務,每個子任務由單個執行緒去完成,等所有執行緒完成後再將結果彙總。(mapreduce)這種場景下,countdoenlatch作為乙個完成訊號來使用。

場景二:多個執行緒等到,一直等到某個條件發生。比如多個賽跑運動員都做好了準備,就等待裁判手中的發令槍響。這種場景下,就可以將countdownlatch的初始值設定成1。

同步工具類

同步工具類可以是任何乙個物件,只要它根據其自身的狀態來協調執行緒的控制流。儲存物件的容器,還能協調生產者和消費者等執行緒之間的控制流 take和put等方法將阻塞,直到佇列達到期望的狀態 佇列即非空,也非滿 相當於一扇門 在閉鎖到達結束狀態之前,這扇門一直是關閉的,並且沒有任何執行緒能通過,當到達結...

同步工具類

同步工具類可以是任何乙個物件,只要它根據其自身的狀態來協調執行緒控制流。阻塞佇列 blockingqueue 可以作為同步工具類,其他型別的同步工具類還包括訊號量 semaphore 柵欄 barrier 以及閉鎖 latch 在平台類庫中還包含其他一些同步工具類的類,如果這些類還無法滿足需要,那麼...

同步工具類之 Latch

同步工具類除了最熟悉的阻塞佇列之外,還包括semaphore barrier以及latch。同樣,我們也可以建立屬於自己的同步工具類。所有的同步工具類都包含了一些特定的結構屬性 比如,封裝了一些狀態,而這些狀態將決定執行同步工具類的執行緒是繼續執行海蛇等待,除此而外,還提供了一些方法對狀態進行操作,...