当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现
生活随笔
收集整理的這篇文章主要介紹了
当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
需求背景:如果沒有采取什么措施,在開啟分支線程后,當前線程繼續往后執行,而不會阻塞等待分支線程,代碼及運行結果如下。
?
?
1. Thread類的join方法
優點:如果當前線程需要指定某些線程結束后再執行,那么可調用對應線程的join方法。
缺點:因為join是實例方法,所以得知道線程對象的名稱,如果程序比較復雜時,線程很多,不好操作。
?
2. Thread類的isAlive方法
其實join方法底層也是調用isAlive方法,源碼如下。
?
3. Thread類的activeCount靜態方法
為什么活躍線程數是2呢??不就剩下主線程一個了嗎?其實兩個線程中有一個是IDEA創建,用于監控程序的,我們可以把這兩個線程打印出來看看,如下圖。
而且,我們可以通過記事本編寫一個Java文件,然后命令行編譯運行看看不用IDEA時,有幾個活躍線程。
不用IDEA時,就一個活躍線程。但我們平時開發是用IDEA開發的,所以通過線程數來限制,不太可靠。
?
4. CountDownLatch類
CountDownLatch內部機制簡單解讀:類內部有兩個變量,一個表示要等待的線程數。另一個表示已經等待了幾個線程。當等待的線程數達到了設定值,那么notifyAll方法將所有調用wait方法進入等待狀態的線程喚醒。
?
5. 自己實現CountDownLatch
5.1 自己實現的CountDownLatch類如下。
5.2 測試代碼和運行結果如下
?
總結
以上是生活随笔為你收集整理的当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用的设计模式——观察者设计模式?和发布
- 下一篇: 类加载的三个阶段——加载、链接以及初始化