等待所有子線程執行完成再執行

package thread;

import java.util.concurrent.CountDownLatch;

public class CountDownLatchTest {

    public static int i = 0;
    public static CountDownLatch c = new CountDownLatch(100);//這裏的數字,開啓幾個線程就寫幾
    public synchronized static void add(){ //注意,如果不加上synchronized,由於併發寫入,結果會小於100
        i++;
        // 每當一個任務線程執行完畢,就將計數器減1,直到線程數爲0   CountDownLatch.await()將被喚醒
        // 也就是主線程需要等待多個子線程執行完畢,之後再繼續執行
        c.countDown();
    }

    public static void main(String[] args) throws Exception{
        for(int i =0 ; i < 100; i++){
            //開啓線程
            new Thread(new Runnable() {
                public void run() {
                    try {
                        CountDownLatchTest.add();
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }).start();
        }
        c.await();//主線程等待子線程執行輸出
        System.out.println(i);
    }
}

 

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