优点:
1、不用使用注解@Async
2、灵活配置线程池数量
3、执行完所有线程后,再执行后续的代码或方法
核心方法:
public void doSomething3() {
ExecutorService executor = Executors.newFixedThreadPool(20); //Runtime.getRuntime().availableProcessors()
List<CompletableFuture<?>> futures = new ArrayList<>();
for(int i=0 ; i<128; i++) {
CompletableFuture<?> future = CompletableFuture.runAsync(() -> {
log.debug(Thread.currentThread().getName() + "运行...");
try {
Thread.sleep(1000); // 模拟耗时操作
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}, executor);
futures.add(future);
}
// 等待所有任务完成
CompletableFuture.allOf(futures.toArray(new CompletableFuture<?>[0])).join();
// 关闭ExecutorService
executor.shutdown();
// 所有任务完成后执行的代码(如果需要)
// ...
}