1.3.線程基礎_等待線程

等待線程

有時候我們需要等待其他線程完成後當前線程纔可以繼續執行。回顧之前的示例可以看到主線程和其他線程是併發運行的,回顧一下1.2中程序執行的日誌:
主線程:啓動線程
Thread-0:0
Thread-0:1
Thread-0:2
Thread-0:3
主線程:中斷線程
主線程:退出
Thread-0:線程被中斷。
Thread-0:取得中斷信號狀態:false
Thread-0:線程退出。

可以看到主線程在其他線程仍然運行的情況下就完成了,如果要求主線程必須等其他線程完成後才能結束該怎麼實現?也就是說主線程要等待其他線程完成,線程等待可以使用join方法,修改後實例如下:
public class JoinWorkThread {
    public static void main(String[] args){
        JoinWorker worker = new JoinWorker();
        Thread t1 = new Thread(worker);
        Thread t2 = new Thread(worker);
        System.out.println("main:開始啓動工作線程");
        t1.start();
        t2.start();
        System.out.println("main:已經啓動所有工作線程");

        System.out.println("main:等待工作線程");
        try {
            t1.join();
            t2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("main:退出");
    }
}
class JoinWorker implements Runnable{
    @Override
    public void run(){
        for(int i=0; i<1000; i++){
            if(i%100 == 0){
                System.out.println(Thread.currentThread().getName() + ":" + i);
            }
        }
    }
}

運行日誌如下:
main:開始啓動工作線程
Thread-0:0
Thread-0:100
Thread-0:200
Thread-0:300
Thread-0:400
Thread-0:500
Thread-0:600
Thread-0:700
Thread-0:800
Thread-0:900
main:已經啓動所有工作線程
main:等待工作線程
Thread-1:0
Thread-1:100
Thread-1:200
Thread-1:300
Thread-1:400
Thread-1:500
Thread-1:600
Thread-1:700
Thread-1:800
Thread-1:900
main:退出


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章