使用场景
在不同系统之间进行沟通的时间,涉及到API接口的交互,对接口的响应时间每个系统有不同的要求。在为其他系统提供API的时候,在系统内部这个接口可能依赖其他的服务,此时要是一步一步检查完成,难免耗时过多。此时便需要对接口进行优化,采用多线程并行完成每个小的前任务,提高效率。
测试代码如下
package taren;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @Description 倒计时器
* @Authror
* @DATE 2019/7/17 9:19
*/
public class CountDownLatchDemo implements Runnable {
static final CountDownLatch latch = new CountDownLatch(5);
static final CountDownLatchDemo demo = new CountDownLatchDemo();
@Override
public void run() {
try {
//模拟前置任务
Thread.sleep(new Random().nextInt(10) * 1000);
System.out.println("检查前置任务ing...");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
//计数减一
latch.countDown();
}
}
public static void main(String[] args) throws InterruptedException {
ExecutorService exec = Executors.newFixedThreadPool(5);
for (int i = 0; i < 5; i++) {
exec.submit(demo);
}
// 等待前置任务的完成
latch.await();
// 准备工作已做好
System.out.println("OK!检查完毕,可以做事了!");
// 关闭线程池
exec.shutdown();
}
}
总的来说,假设这个接口的提供需要5个前置任务完成才能完成,就开启5个线程去分别完成每个前置任务,每完成一个,倒计时减一,直到完成为止。