一.让单个线程等待:多个线程(任务)完成后,进行汇总合并
public class CountDownLatchTest {
public static void main(String[] args) throws InterruptedException {
final CountDownLatch countDownLatch = new CountDownLatch(10);
for (int i = 0; i < 10; i++) {
new Thread(()-> {
System.out.println("处理任务");
try {
Thread.sleep(new Random().nextInt(2000));
} catch (InterruptedException e) {
e.printStackTrace();
}
countDownLatch.countDown();
}).start();
}
countDownLatch.await();
System.out.println("汇总,等等其它业务逻辑");
}
}
执行结果
处理任务
处理任务
处理任务
处理任务
处理任务
汇总,等等其它业务逻辑
二.让多个线程等待:模拟并发,让并发线程一起执行
public class CoundDownLatchTest2 {
public static void main(String[] args) throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(1);
for (int i = 0; i < 10; i++) {
int finalI = i;
new Thread(() -> {
try {
System.out.println(finalI + "号准备完毕!");
countDownLatch.await();
System.out.println(finalI + "号开始干活!");
Thread.sleep(new Random().nextInt(200));
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
Thread.sleep(2000);
countDownLatch.countDown();
}
}
执行结果:
1号准备完毕!
3号准备完毕!
2号准备完毕!
0号准备完毕!
4号准备完毕!
........
1号开始干活!
4号开始干活!
0号开始干活!
2号开始干活!
3号开始干活!