CountLatch的作用,是让其它线程执行完了再执行某个线程。就有点像老师组织学生春游的时候,会等所有的学生到齐了,才会出发。
比如我在工作中用到这个知识点的时候是做一个类似于统计汇总的功能,需要封装四个查询接口,这四个接口是独立的,这时候就可以使用CountDownLatch,开4个线程并发地去调用这四个接口,主线程等待四个接口执行完了拿到结果之后才会将结果返回给前端。
使用示例(代码转载于:http://www.cnblogs.com/dolphin0520/p/3920397.html)
public class Test {
public static void main(String[] args) {
final CountDownLatch latch = new CountDownLatch(2);
new Thread(){
public void run() {
try {
System.out.println("子线程"+Thread.currentThread().getName()+"正在执行");
Thread.sleep(3000);
System.out.println("子线程"+Thread.currentThread().getName()+"执行完毕");
latch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start();
new Thread(){
public void run() {
try {
System.out.println("子线程"+Thread.currentThread().getName()+"正在执行");
Thread.sleep(3000);
System.out.println("子线程"+Thread.currentThread().getName()+"执行完毕");
latch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start();
try {
System.out.println("等待2个子线程执行完毕...");
latch.await();
System.out.println("2个子线程已经执行完毕");
System.out.println("继续执行主线程");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}