使用CompletableFuture编排 AService.get()、BService.get()、CService.get(int i) (ABC三个服务返回结果都是int),满足使用A、B的结果相加,再作为参数传给C,取得C的结果后乘以 100 后返回。
要求:
1.显示指定线程池
2.处理异常情况,异常情况返回0
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static void main(String[] args) {
// 创建一个固定线程池
ExecutorService executor = Executors.newFixedThreadPool(3);
CompletableFuture<Integer> future = CompletableFuture
.supplyAsync(AService::get, executor) // AService.get()在新的线程中执行
.thenApplyAsync(result1 -> CompletableFuture
.supplyAsync(BService::get, executor) // BService.get()在新的线程中执行
.thenApply(result2 -> result1 + result2), executor) // A和B的结果相加,还是在新的线程中执行
.thenApplyAsync(sum -> CompletableFuture
.supplyAsync(() -> CService.get(sum), executor) // CService.get()在新的线程中执行
.thenApply(result3 -> result3 * 100), executor); // 乘以100,还是在新的线程中执行
// 如果前面的操作成功,那么这个thenAccept会执行。如果前面的操作失败,这个thenAccept不会执行。
future.thenAccept(result -> System.out.println("Result: " + result));
// 关闭线程池,使它不再接受新的任务,但会等待所有提交的任务执行完成才关闭。
executor.shutdown();
}
}