completablefuture使用 whenCompleteAsync,给出demo
时间: 2024-11-22 13:36:35 浏览: 7
STK EOIR模块使用DEMO
`CompletableFuture` 是 Java 中用于异步编程的一种工具,它允许你在 `Future` 的基础上处理完成事件。`whenCompleteAsync()` 方法是一个用于设置当 `CompletableFuture` 完成时执行的任务的方法,这个任务会在一个独立的线程中运行。
以下是一个简单的演示示例:
```java
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CompletableFutureDemo {
private static ExecutorService executor = Executors.newSingleThreadExecutor();
public static void main(String[] args) {
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
System.out.println("Task is running...");
// 这里模拟耗时操作
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Task completed.");
});
// 使用whenCompleteAsync添加回调,在未来完成时执行
future.whenCompleteAsync((result, error) -> {
if (error != null) {
System.out.println("Error occurred: " + error.getMessage());
} else {
System.out.println("Callback executed after task completion.");
}
}, executor);
// 主线程继续执行,无需等待future完成
System.out.println("Main thread continues...");
}
// 关闭ExecutorService以释放资源
static void shutdownExecutor() {
executor.shutdown();
}
}
```
在这个例子中,我们创建了一个 `CompletableFuture` 来执行一个模拟任务,然后通过 `whenCompleteAsync()` 方法添加了一个回调,该回调会在任务完成后在单独的线程中执行。注意,主线程不会阻塞,而是立即返回并打印出"Main thread continues..."。
阅读全文