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);
}
}