自己動手簡單實現CountDownLatch

2021-08-11 07:02:36 字數 1381 閱讀 2918

在使用執行緒池的過程中,如何判斷所有提交的任務都已經執行完畢了呢?使用jdk自帶的countdownlatch,可以輕鬆實現這一需求

public class

countdownlatchtest catch (interruptedexception e)

});});

executorservice.shutdown

(); countdownlatch.await

(); system.out.println

("all task finished");

}}

執行結果

pool-

1-thread-1

0pool-

1-thread-5

4pool-

1-thread-4

3pool-

1-thread-3

2pool-

1-thread-2

1all task finished

現在自己簡單實現這一功能。

public

class

countdown

public

void

countdown()

}public

void

await() throws interruptedexception }}

}

定義countdown類,有兩個屬性total和count。total記錄所有執行緒的數量,count記錄當前完成執行緒的數量。count和total不相等時,wait,在countdown時喚醒,直到total和count相等時退出迴圈。

測試

public class

countdowntest catch (interruptedexception e)

});});

executorservice.shutdown

(); countdownlatch.await

(); system.out.println

("all task finished");

}}

結果

pool-

1-thread-4

3pool-

1-thread-3

2pool-

1-thread-5

4pool-

1-thread-2

1pool-

1-thread-1

0all task finished

無論執行多少次,都能保證所有執行緒都完成任務後在輸出列印語句。

自己動手實現vector

有了實現string的基礎,在加上一點點模板的知識,就可以自己動手實現乙個vector了。下面是我實現的 比較簡單。有點犯懶了,講解以後再寫吧!ifndef my vector h define my vectoe h include typedef unsigned int size t temp...

自己動手實現redux 一

訂閱事件,返回乙個取消訂閱函式 let subscribe cb let dispatch action return export default createstore 當我們使用redux時,首先需要使用redux的createstore並且傳入reducer來建立我們的store impor...

自己動手實現乙個簡單的React

為了更好的理解react,我決定讀preact的原始碼,preact是乙個非常小的框架,同時也和react的實現原理以及api一樣,幾乎可以很好代替react。雖然還是有一些差異的。但是使用的時候幾乎不會有什麼違和感。看原始碼總是不夠過癮,於是做了乙個偉大的決定就是自己親手去寫乙個react,畢竟p...