如何讓主線程等待所有子線程執行完畢


創建線程類 : 設置CountDownLatch成員變量,並且在run方法末尾調用CountDownLatch實例的CountDown()方法。

調用該類: 設置所需工作的線程數量,作為構造參數生成線程實例對象,啟動所有線程,調用CountDownLatch的await方法。

// 創建一個線程 並設置成員變量 CountDownLatch
package multi.thread;

import java.util.concurrent.CountDownLatch;

public class ImportThread extends Thread {
    private CountDownLatch threadsSignal;
    public ImportThread(CountDownLatch threadsSignal){
        this.threadsSignal = threadsSignal;
    }
    
    @Override
    public void run(){
        System.out.println(Thread.currentThread().getName()+" :: start...");
        // do something...
        threadsSignal.countDown(); // when the thread end the number will minus 1
        System.out.println(Thread.currentThread().getName() + "結束,還有" + threadsSignal.getCount() + " 個線程");
    }
    
}
package multi.thread;

import java.util.concurrent.CountDownLatch;

public class TestEnd {
    public static void main(String[] args) {
        int threadNum = 4;
        CountDownLatch threadSignal = new CountDownLatch(threadNum); // 初始化countDown
        for (int i = 0; i < threadNum; i++) {
            Thread t = new ImportThread(threadSignal);
            t.start();
        }
        try {
            threadSignal.await(); // 等待所有子線程完成
            System.out.println(Thread.currentThread().getName() + "結束...");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM