Java CompletableFuture结合线程池 - 异步多线程
https://www.cnblogs.com/dongye95/p/16352895.html
什么是CompletableFuture
CompletableFuture是对Future的扩展和增强。CompletableFuture实现了Future接口,并在此基础上进行了丰富的扩展,完美弥补了Future的局限性,同时 CompletableFuture 实现了对任务编排的能力。借助这项能力,可以轻松地组织不同任务的运行顺序、规则以及方式。
异步执行方法
public static CompletableFuture<Void> runAsync(Runnable runnable)
public static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor)
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier)
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor)
CompletableFuture.runAsync(Runnable runnable): 这个方法接收一个Runnable接口的实现,用于异步执行没有返回值的任务。它返回一个CompletableFuture。
CompletableFuture.runAsync(() -> {
// 执行一些长时间运行的任务
});
CompletableFuture.supplyAsync(Supplier supplier): 这个方法接收一个Supplier接口的实现,用于异步执行有返回值的任务。它返回一个CompletableFuture,其中U是异步任务的结果类型。
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 执行一些长时间运行的任务
return "任务结果";
});
如何使用线程池完成异步多线程
runAsync
items.stream().forEach(item ->
CompletableFuture.runAsync(() -> mapper.insert(item), threadPool));
supplyAsync
List<CompletableFuture> rCompletableFutures = items.stream().map(item ->
CompletableFuture.supplyAsync(() -> {
return mapper.select(item);
}, threadPool)).collect(Collectors.toList());