CountDownLatch想一个阀门一样们等待多有的线程结束了,才会向下进行,
下面代码,只有准备线程准备好可(startDownLatch 计数为0的时候才会执行work线程),await()方法就是等待计数为0,
countDown()方法就是计数减一,使用很简单,
public class TestClass {
public static void main(String[] args) {
CountDownLatch startDownLatch = new CountDownLatch(1);
CountDownLatch endDownLatch = new CountDownLatch(4);
new Thread(new Work(startDownLatch,endDownLatch)).start();
new Thread(new Work(startDownLatch,endDownLatch)).start();
new Thread(new Work(startDownLatch,endDownLatch)).start();
new Thread(new Work(startDownLatch,endDownLatch)).start();
System.out.println("准备线程!");
startDownLatch.countDown();
try {
endDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("运行结束");
}
}
class Work implements Runnable {
private CountDownLatch startCount;
private CountDownLatch endCount;
Work(CountDownLatch startCount,CountDownLatch endCount){
this.startCount = startCount;
this.endCount = endCount;
}
@Override
public void run() {
try {
startCount.await();
System.out.println("work!!!!");
endCount.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}