在使用執行緒池的過程中,如何判斷所有提交的任務都已經執行完畢了呢?使用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...