使用:
场景1:等待driver完成后再执行其他线程(服务可用性检测)。
package mianshi.countdownlatch;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
public class Driver {
public static void main(String[] args) throws Exception {
CountDownLatch startSignal = new CountDownLatch(1);
CountDownLatch doneSignal = new CountDownLatch(10);
for (int i = 0; i < 10; i++) {
new Thread(new Worker(startSignal, doneSignal)).start();
}
doSomethingElse();//开启驱动
startSignal.countDown();
doneSignal.await();//等待所有线程完成
doOtherthingElse();//完成后做其他事
System.out.println(doneSignal.getCount());//0
}
static void doSomethingElse() {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("driver is ok");
}
static void doOtherthingElse() {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("things done");
}
}
class Worker implements Runnable {
private final CountDownLatch startSignal;
private final CountDownLatch doneSignal;
Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
this.startSignal = startSignal;
this.doneSignal = doneSignal;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
startSignal.await();
doWork();
doneSignal.countDown();
} catch (Exception e) {
}
}
void doWork() {
try {
Thread.sleep((int)(Mat