java8 的 CompletableFuture
可以解决并行执行代码并获取返回结果
例如有场景:
5 个执行 sql 的方法, 每个方法耗时 2s, 如果串行执行, 则耗时至少需要 10s. 使用并行执行, 耗时最少需要 2s
/**
*
*/
@Test
public void test() {
long start = System.currentTimeMillis();
List<String> list = new CopyOnWriteArrayList<>();
List<CompletableFuture> futureList = new ArrayList<>();
for (int i = 0; i < 5; i++) {
int finalI = i;
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
ThreadUtils.sleepQuietly(2000);
return "执行结果" + finalI;
}).whenComplete((value, e) -> {
list.add(value);
});
futureList.add(future);
}
// 等待所有 future 执行完成 .allOf .join
CompletableFuture.allOf(futureList.toArray(new CompletableFuture[0])).join();
System.out.println(list);
long end = System.currentTimeMillis();
System.out.println("耗时: " + (end - start) + "ms");
}