前言:前段时间有个需求,需要循环调用多次中台接口查询数据,为了减少等待时间采用多线程的方式调用
不多bb,直接上测试代码
@Test
public void testMultiThread() throws InterruptedException {
int i = 5;
System.out.println("=====多线程开始=====");
// 创建闭锁对象抓住所有线程,构造器指定倒数次数
CountDownLatch countDownLatch = new CountDownLatch(i);
while (i > 0) {
int finalI = i;
// 启用多线程
CompletableFuture.runAsync(() -> {
System.out.println(finalI);
// 线程执行结束则countDown,倒数一次
countDownLatch.countDown();
});
i--;
}
// 等待所有线程都countDown,倒数完毕,结束线程
countDownLatch.await();
System.out.println("=====多线程结束=====");
}
本次是使用CompletableFuture
对象的runAsync()
方法直接创建子线程。
而CountDownLatch
对象是用于阻塞主线程,如果没有的话,代码会在子线程还未执行结束时就开始执行下面的逻辑