日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Join的加强版CountDownLatch

發布時間:2025/3/20 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Join的加强版CountDownLatch 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CountDownLatch允許一個或多個線程等待其他線程完成操作。

假如有這樣一個需求:我們需要解析一個Excel里多個sheet的數據,此時可以考慮使用多線程,每個線程解析一個sheet里的數據,等到所有的sheet都解析完之后,程序需要提示解析完成。在這個需求中,要實現主線程等待所有線程完成sheet的解析操作,最簡單的做法是使用join()方法。

public class JoinCountDownLatchTest {public static void main(String[] args) throws InterruptedException {Thread parser1 = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("parser1 finish");}});Thread parser2 = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("parser2 finish");}});parser1.start();parser2.start();parser1.join();parser2.join();System.out.println("all parser finish");} } result: parser1 finish parser2 finish all parser finish 主線程會等待線程1和2運行完成后再運行。

在JDK 1.5之后的并發包中提供的CountDownLatch也可以實現join的功能,并且比join的功能更多

CountDownLatch的構造函數接收一個int類型的參數作為計數器,如果你想等待N個點完成,這里就傳入N。

當我們調用CountDownLatch的countDown方法時,N就會減1,CountDownLatch的await方法
會阻塞當前線程,直到N變成零。由于countDown方法可以用在任何地方,所以這里說的N個點,可以是N個線程,也可以是1個線程里的N個執行步驟。用在多個線程時,只需要把這個CountDownLatch的引用傳遞到線程里即可。如果有某個線程處理得比較慢,我們不可能讓主線程一直等待,所以可以使用另外一個帶指定時間的await方法——await(long time,TimeUnit unit),這個方法等待特定時間后,就會不再阻塞當前線程。join也有類似的方法。

public class Test {static CountDownLatch c = new CountDownLatch(2);public static void main(String[] args) throws InterruptedException {new Thread(() -> {System.out.println("線程1運行任務1");c.countDown();System.out.println("線程1運行任務2");c.countDown();}).start();c.await();System.out.println("主線程匯聚任務");} } result: 線程1運行任務1 線程1運行任務2 主線程匯聚任務

注意的是:計數器必須大于等于0,只是等于0時候,計數器就是零,調用await方法時不會
阻塞當前線程。CountDownLatch不可能重新初始化或者修改CountDownLatch對象的內部計數
器的值。

轉載于:https://www.cnblogs.com/keeya/p/9320981.html

總結

以上是生活随笔為你收集整理的Join的加强版CountDownLatch的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。