Appearance
CompletableFutureTask
- CompletableFutureTask和CompletableFuture的区别是:
- FutureTask:FutureTask 是一种实现了 Runnable 和 Future 接口的任务,它可以包装一个 Callable 或 Runnable 对象,并且可以提交给 ExecutorService 来执行。执行完成后,可以使用 Future 方法来获取执行结果。
- CompletableFuture:CompletableFuture 是 Java 8 引入的一种更高级的工具,用于处理异步计算。它不仅实现了 Future 接口,还提供了很多方法来进行流式处理、组合多个异步任务和手动完成计算。
- CompletableFutureTask可以用来包装Runnable对象。
- CompletableFutureTask可以用来获取异步计算的结果。
- CompletableFutureTask的使用方法:
- 创建一个Runnable对象。
- 创建一个CompletableFutureTask对象,将Runnable对象传递给CompletableFutureTask的构造方法。
- 创建一个Thread对象,将CompletableFutureTask对象传递给Thread的构造方法。
- 调用Thread对象的start()方法启动线程。
- 调用CompletableFutureTask对象的get()方法获取异步计算的结果。
- 代码示例:
java
package io.alex.concurrent;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureExample {
public static void main(String[] args) {
// 创建一个异步计算任务
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(2000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
return 10;
});
future.thenApply(result -> {
// 对上一步的计算结果进行加倍
System.out.println("Initial result: " + result);
return result * 2;
}).thenAccept(finalResult -> {
// 输出最终结果
System.out.println("Final result: " + finalResult);
}).exceptionally(ex -> {
// 处理异常
System.err.println("Exception: " + ex.getMessage());
return null;
});
// 主线程继续执行其他操作
System.out.println("Main thread is doing something else...");
// 等待异步计算完成
try {
System.out.println("Waiting for the future to complete...");
Integer i = future.get();// 等待计算完成
System.out.println("Future is done. result =>"+i);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}