您的位置:首頁>正文

多執行緒之執行緒的百米賽跑

在百米賽跑中, 多個參賽隊員在聽到發令槍響之後, 開始跑步, 到達終點後結束計時, 然後統計各個隊員的成績。 而這個在執行緒中需要考慮兩點, 第一:發令槍響, 這是所有跑步隊員(執行緒)接收到的出發信號, 此處涉及到裁判(主執行緒)如何通知跑步者(子執行緒)的問題;第二:如何知道所有跑步者完成了賽跑, 也就是主執行緒如何知道子執行緒已經全部完成, 這有很多種實現方法, 這邊我們使用CountDownLatch工具類來實現。 具體看以下代碼:

跑步者執行緒

運動會開始!

平均成績

CountDownLatch類是一個倒數的同步計數器, 在程式中啟動了兩個計數器, 一個是開始計數器begin, 表示的是發令槍, 另外是結束計數器, 這裡是有十個, 表示的是每個執行緒的執行情況, 也就是跑步者是否跑完比賽。 程式的邏輯如下:

10個執行緒都開始運行, 執行到begin.await()後執行緒阻塞, 等待begin的計數變為0

主執行緒調用begin的CountDown方法, 是begin的計數器為0

10個執行緒繼續運行

主執行緒繼續運行下一個語句, end的計數器不為0, 主執行緒等待

每個執行緒運行結束時把end的計數器減1, 標誌著本執行緒運行完畢

10個執行緒全部結束, end的計數器為0

主執行緒繼續執行, 列印出成績平均值

CountDownLatch的作用是控制一個計數器, 每個執行緒在運行完畢後會執行CountDown, 表示自己運行結束, 這對於多個子任務的計算特別有效, 比如一個非同步任務需要拆分成10個子任務執行, 主任務必須要知道子任務是否完成, 所有子任務完成後才能進行合併計算, 從而保證了一二主任務的邏輯的正確性。 這就是CountDownLatch的作用。

謝謝大家的收看~喜歡的關注一波
同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示