CountDownLatch 的簡單理解

2021-08-25 08:30:11 字數 1099 閱讀 9570

countdownlatch是乙個同步工具類,用來協調多個執行緒之間的同步,或者說起到執行緒之間的通訊(而不是用作互斥的作用)。

countdownlatch能夠使乙個執行緒在等待另外一些執行緒完成各自工作之後,再繼續執行。使用乙個計數器進行實現。計數器初始值為執行緒的數量。當每乙個執行緒完成自己任務後,計數器的值就會減一。當計數器的值為0時,表示所有的執行緒都已經完成了任務,然後在countdownlatch上等待的執行緒就可以恢復執行任務。

countdownlatch典型用法1:某一線程在開始執行前等待n個執行緒執行完畢。將countdownlatch的計數器初始化為nnew countdownlatch(n),每當乙個任務執行緒執行完畢,就將計數器減1countdownlatch.countdown(),當計數器的值變為0時,在countdownlatch上await()的執行緒就會被喚醒。乙個典型應用場景就是啟動乙個服務時,主線程需要等待多個元件載入完畢,之後再繼續執行。

countdownlatch典型用法2:實現多個執行緒開始執行任務的最大並行性。注意是並行性,不是併發,強調的是多個執行緒在某一時刻同時開始執行。類似於賽跑,將多個執行緒放到起點,等待發令槍響,然後同時開跑。做法是初始化乙個共享的countdownlatch(1),將其計數器初始化為1,多個執行緒在開始執行任務前首先coundownlatch.await(),當主線程呼叫countdown()時,計數器變為0,多個執行緒同時被喚醒。

countdownlatch countdown = new countdownlatch (2);

三個執行緒,執行緒一等其他執行完再執行

執行緒一:countdown.await();

執行緒二:countdown.countdown();

執行緒三:countdown.countdown();

執行緒一等到

二、三執行完再繼續執行。

這個2表示有幾個執行緒執行完再放開await();

countdownlatch是一次性的,計數器的值只能在構造方法中初始化一次,之後沒有任何機制再次對其設定值,當countdownlatch使用完畢後,它不能再次被使用。

CountDownLatch的簡單理解

countdownlatch是乙個同步工具類,用來協調多個執行緒之間的同步,或者說起到執行緒之間的通訊 而不是用作互斥的作用 countdownlatch能夠使乙個執行緒在等待另外一些執行緒完成各自工作之後,再繼續執行。使用乙個計數器進行實現。計數器初始值為執行緒的數量。當每乙個執行緒完成自己任務後...

CountDownLatch類的分析

countdownlatch 實現 乙個或多個執行緒 等待 其他一組執行緒的操作執行完成。1 內部類 sync extends abstractqueuedsynchronizer 繼承了aqs,並實現了tryacquireshared,tryreleaseshared方法,同時擁有構造方法 syn...

類CountDownLatch的使用

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