切记:写的用CopyOnWriteArrayList
hap的话使用ConcurrentHashMap
public static void main(String[] args) {
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(4, 5, 3000, TimeUnit.MILLISECONDS, new
ArrayBlockingQueue<>(5));
System.out.println("等等");
List<Long> totalSellerList = new ArrayList<>();
totalSellerList.add(1L);
totalSellerList.add(2L);
totalSellerList.add(3L);
totalSellerList.add(4L);
totalSellerList.add(5L);
totalSellerList.add(6L);
totalSellerList.add(7L);
List<Long> res = new CopyOnWriteArrayList<>();
CompletableFuture<Void> all = CompletableFuture.allOf(
totalSellerList.stream().map(subList -> CompletableFuture.supplyAsync(() -> {
log.info("------" + subList);
Long a = subList * 100;
res.add(a);
return res;
}, threadPoolExecutor).exceptionally(e -> {
log.error("asyncGetOneDayPlanData error: sellerId:{}, {}", subList, e.getMessage());
return null;
})).toArray(CompletableFuture[]::new));
//阻塞,直到所有任务结束。
all.join();
System.out.println("###" + res);
}
/*public static void main(String[] args) {
ThreadPoolExecutor threadPoolExecutor =
new ThreadPoolExecutor(4, 5, 3000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(5));
List<Integer> ids = new ArrayList<>();
ids.add(1);
ids.add(2);
ids.add(3);
ids.add(4);
ids.add(5);
ids.add(6);
ids.add(7);
ids.add(8);
List<Integer> re = new ArrayList<>();
CompletableFuture<Integer>[] completableFutures = ids.stream().map(id -> {
return CompletableFuture.supplyAsync(() -> getNewId(id), threadPoolExecutor);
}).toArray(CompletableFuture[]::new);
// 等待所有任务执行完
CompletableFuture.allOf(completableFutures).join();
for (CompletableFuture<Integer> completableFuture : completableFutures) {
try {
re.add(completableFuture.get());
System.out.println(completableFuture.get());
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println(re);
return;
}
public static int getNewId(int id) {
log.info("-------" + id);
return id * 100;
}*/