前言:前段时间有个需求,需要循环调用多次中台接口查询数据,为了减少等待时间采用多线程的方式调用
不多bb,直接上测试代码
text
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@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 对象是用于阻塞主线程,如果没有的话,代码会在子线程还未执行结束时就开始执行下面的逻辑





评论
登录后即可评论
分享你的想法,与作者互动
暂无评论