天天看點

非常有用的并發控制-倒計時器CountDownLatch

給你出個題,控制5個線程執行完後主線徎再往下執行,并統計5個線程的所耗時間。當然我們可以通過join的形式完成這道題,但如果我說統計100個1000個線程呢?難道要寫1000個join等待嗎?這顯然是不現實的。

廢話少說,我們來做一個例子看看上面的題怎麼實作,并了解倒計時器。

非常有用的并發控制-倒計時器CountDownLatch

首先通過new CountDownLatch(5)約定了倒計時器的數量,在這裡也是線程的數量,每個線程執行完後再對倒計時器-1。countDown()方法即是對倒計時器-1,這個方法需要放在finally中,一定要保證在每個線程中得到釋放,不然子線程如果因為某種原因報錯倒計時器永遠不會清0,則會導報主線程會一直等待。

await()方法即是主線程阻塞等待倒計器歸0後再繼續往下執行,當然await可以帶時間進去,等待多久時間後不管倒計時器有沒有歸0主線程繼續往下執行。

如上面的例子所示,我們輸出了倒計時器最後的數字0,表示倒計時器歸0了,也輸出了從開始到結束所花費的時間。從這個例子可以完全了解倒計時器的含義,這個工具類在實際開發經常有用到,也很好用。

推薦去我的部落格閱讀更多:

1.Java JVM、集合、多線程、新特性系列教程

2.Spring MVC、Spring Boot、Spring Cloud 系列教程

3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

4.Java、後端、架構、阿裡巴巴等大廠最新面試題

覺得不錯,别忘了點贊+轉發哦!

繼續閱讀