使用CompletableFuture改造这段代码
时间: 2024-04-03 07:29:31 浏览: 18
CompletableFuture是Java 8引入的一个异步编程工具,可以简化多线程编程和异步任务的处理。通过CompletableFuture,可以将一个任务拆分成多个子任务,并行执行,最后将结果合并。
下面是使用CompletableFuture改造代码的示例:
```java
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureExample {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 原始代码
String result = doTaskA() + doTaskB() + doTaskC();
System.out.println(result);
// 使用CompletableFuture改造
CompletableFuture<String> futureA = CompletableFuture.supplyAsync(() -> doTaskA());
CompletableFuture<String> futureB = CompletableFuture.supplyAsync(() -> doTaskB());
CompletableFuture<String> futureC = CompletableFuture.supplyAsync(() -> doTaskC());
CompletableFuture<String> combinedFuture = futureA.thenCombine(futureB, (resultA, resultB) -> resultA + resultB)
.thenCombine(futureC, (resultAB, resultC) -> resultAB + resultC);
String combinedResult = combinedFuture.get();
System.out.println(combinedResult);
}
private static String doTaskA() {
// 模拟耗时操作
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Task A ";
}
private static String doTaskB() {
// 模拟耗时操作
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Task B ";
}
private static String doTaskC() {
// 模拟耗时操作
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Task C ";
}
}
```
在上面的示例中,我们使用CompletableFuture的`supplyAsync`方法创建了三个异步任务,分别对应原始代码中的doTaskA、doTaskB和doTaskC方法。然后使用`thenCombine`方法将这三个任务的结果进行合并,最终得到一个包含合并结果的CompletableFuture对象。
注意,使用CompletableFuture时需要注意异常处理和线程安全等问题。