併發程式設計 CountDownLatch 講解

2021-08-30 04:17:57 字數 1414 閱讀 1234

countdownlatch 介紹

countdownlatch 是用於等待執行緒的執行,等待執行緒數量為 0 後,則結束等待,執行該執行緒等待後所要執行的**。

例子如下:

private static countdownlatch cadownlatch = new countdownlatch(2);

public static void main(string args) catch (interruptedexception e)

system.out.println("其它兩個執行緒執行結束");

system.out.println("執行緒" + thread.currentthread().getname() + "結束");

};}.start();

new thread() catch (interruptedexception e)

cadownlatch.countdown();

};}.start();

new thread() catch (interruptedexception e)

cadownlatch.countdown();

};}.start();

}

執行結果為:

執行緒thread-0開始

執行緒thread-0等待其它兩個執行緒執行結束

執行緒thread-1執行

執行緒thread-2執行

其它兩個執行緒執行結束

執行緒thread-0結束

countdownlatch 原始碼分析

countdownlatch 內部通過標記和阻塞執行緒和喚醒執行緒來實現功能。

首先分析 await() 方法:

public void await() throws interruptedexception 

public final void acquiresharedinterruptibly(int arg)

throws interruptedexception

private void doacquiresharedinterruptibly(int arg)

throws interruptedexception

} finally

}

接下來看 countdown() 方法:

public void countdown() 

public final boolean releaseshared(int arg)

return false;

}private void doreleaseshared()

// ...

}// ...

}}

java併發程式設計之CountDownLatch

countdownlatch 主要是作用是用來維護乙個執行緒控制多個執行緒,內部是通過乙個計數器實現的,當我們建立乙個countdownlatch物件的時候,就需要指定乙個數值,這個數值就表示了執行緒的數量,每當乙個執行緒任務執行完畢,計數器就會減 1,當計數器的值變為0時,就表示所有的執行緒都已經...

java執行緒同步之CountDownLatch

1 類說明 jdk的concurrent包中的countdownlatch類是乙個執行緒同步的輔助類,它使得執行緒可以一直等待在其它執行緒中執行的操作,直到此操作結束。countdownlatch在初始化的時候指定乙個大小值n,呼叫countdownlatch的await方法的執行緒會陷入等待之中,...

併發程式設計學習 併發程式設計的挑戰

死鎖 資源限制的挑戰 併發程式設計的目的是為了讓程式執行的更快,但是並不是啟動更多的執行緒,就能讓程式最大限度的併發執行。在進行併發程式設計時,如果希望通過多執行緒執行任務讓程式執行的更快,會面臨非常多的挑戰,比如上下文切換的問題,死鎖的問題,以及受限於硬體和軟體的資源限制問題 即使是單核處理器也支...