CountDownLatch 是 java.util.concurrent 包下的一個同步輔助類,它能使一個或多個線程在其餘的線程的一系列操做完成以前一直等待,初始化值爲計數器大小(即線程數量)。java
countDown方法,當前線程調用此方法,則計數減一。
await方法,調用此方法會一直阻塞當前線程,直到計時器的值爲0。併發
測試線程ide
import java.util.concurrent.CountDownLatch; public class MyThread implements Runnable { private final CountDownLatch startSignal; public MyTestThread(CountDownLatch startSignal) { super(); this.startSignal = startSignal; } @Override public void run() { try { startSignal.await(); //一直阻塞當前線程,直到計時器的值爲0 } catch (InterruptedException e) { e.printStackTrace(); } //實際測試操做 doWork(); } private void doWork() { // TODO Auto-generated method stub System.out.println("do work"); } }
測試主方法測試
public class MyTest { public static void main(String[] args) { // 初始化計數器爲 1 CountDownLatch start=new CountDownLatch(1); //模擬16個線程 for(int i=0;i<16;i++){ MyTestThread tt =new MyTestThread(start); Thread t = new Thread(tt); t.start(); } //計數器減 1 start.countDown(); //計數器爲0,全部線程釋放,同時併發 } }