completableFutures异步多线程
代码如下(示例):
//规定线程数量
ExecutorService executor = Executors.newFixedThreadPool(5);
//创建completableFutures 集合
List<CompletableFuture<HashMap<String, Object>>> completableFutures = new ArrayList<>();
for (String tile : tiles) {
//创建异步线程
CompletableFuture<HashMap<String, Object>> future = CompletableFuture.supplyAsync(() -> {
Map<String, Object> todoCounts = appOperNodeService.getTodoCounts(tile);
System.out.println(Thread.currentThread().getName());
//业务内容
HashMap<String, Object> map = new HashMap<>();
map.put("zhaunQu", tile);
return map;
},executor);
//将每个 CompletableFuture 对象 future 添加到一个 List 集合 completableFutures 中。
completableFutures.add(future);
}
//创建一个新的 CompletableFuture<Void> 对象 allFutures,该对象代表了一个在给定的多个 CompletableFuture 对象全部完成后完成的聚合操作。
CompletableFuture<Void> allFutures =
CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture[0]));
allFutures.join(); // 等待所有任务完成
for (CompletableFuture<HashMap<String, Object>> future : completableFutures) {
try {
//阻塞当前线程并获取异步任务的结果。当调用 future.get() 时,如果异步任务已经完成,该方法会立即返回结果。如果异步任务还未完成,future.get() 方法将会阻塞当前线程,直到异步任务完成并返回结果。
HashMap<String, Object> result = future.get();
firList.add(result);
} catch (Exception e) {
e.printStackTrace();
}
}