CountDownLatch
常用于允许一个或多个线程等待直到在其他线程中一组操作执行完成再执行
比如,线程4,5,6 需要等待线程1,2,3执行完成之后再执行
/**
* countDownLatch 和join功能类似,它允许一个或多个线程等待直到在其他线程中一组操作执行完成
*/
public class CountDownLatchTest {
private final static CountDownLatch COUNT_DOWN_LATCH1 = new CountDownLatch(3);
private final static CountDownLatch COUNT_DOWN_LATCH2 = new CountDownLatch(1);
private final static CountDownLatch end = new CountDownLatch(3);
public static void main(String[] args) throws InterruptedException {
for (int i=0;i<3;i++){
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("我是线程:"+Thread.currentThread().getName()+"准备完毕..");
try {
COUNT_DOWN_LATCH1.countDown();
COUNT_DOWN_LATCH2.await();
System.out.println("我是线程:"+Thread.currentThread().getName()+"开始起跑");
Thread.sleep(new Random().nextInt(1000));
System.out.println("我是线程:"+Thread.currentThread().getName()+"到达终点");
end.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
COUNT_DOWN_LATCH1.await();
System.out.println("各就各位,预备..");
COUNT_DOWN_LATCH2.countDown();
end.await();
System.out.println("全部到达终点");
}
}
输出:
我是线程:Thread-0准备完毕..
我是线程:Thread-2准备完毕..
我是线程:Thread-1准备完毕..
各就各位,预备..
我是线程:Thread-0开始起跑
我是线程:Thread-2开始起跑
我是线程:Thread-1开始起跑
我是线程:Thread-2到达终点
我是线程:Thread-0到达终点
我是线程:Thread-1到达终点
全部到达终点