使用CompletableFuture.allOf实现异步执行同步搜集结果
/**
* @author wjq
* @create 2022-03-12 16:19
*/
public class TestCompleteFuture {
private static final int corePoolSize = 10; // 核心线程数
private static final int maximumPoolSize = 20; // 最大线程数
private static final long keepAliveTime = 60; // 存活时间
/**
* 自定义线程池
*/
private static final ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime,
TimeUnit.SECONDS, new ArrayBlockingQueue(100), new ThreadPoolExecutor.CallerRunsPolicy());
/**
* 使用CompletableFuture完成多任务执行示例
* @param args
*/
public static void main(String[] args) {
List<String> resultList = new ArrayList<>();
// CompletableFuture list
List<CompletableFuture<?>> list = new ArrayList<>();
// 第一个任务
list.add(CompletableFuture.runAsync(() -> {
// TODO: 具体的任务执行...
resultList.add("第一个任务的执行结果");
}, executor));
// 第二个任务
list.add(CompletableFuture.runAsync(() -> {
// TODO: 具体的任务执行...
resultList.add("第二个任务的执行结果");
}, executor));
// 第三个任务
list.add(CompletableFuture.runAsync(() -> {
// TODO: 具体的任务执行...
resultList.add("第三个任务的执行结果");
}, executor));
// 第四个任务
list.add(CompletableFuture.runAsync(() -> {
// TODO: 具体的任务执行...
resultList.add("第四个任务的执行结果");
}, executor));
// 待等所有任务执行完成
CompletableFuture.allOf(list.toArray(new CompletableFuture[0])).join();
System.out.println(resultList);
}
}