jdk8特性:CompletableFuture的使用
需求:在java代码中,我需要这样。就是异步执行,我主线程等待,异步执行的那个必须显示调用告知已经执行完毕,主线程才能执行 。
示例:
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class AsyncExample {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 创建一个CompletableFuture对象
CompletableFuture<Void> future = new CompletableFuture<>();
// 启动一个新线程来执行异步任务
new Thread(() -> {
try {
// 模拟异步操作
Thread.sleep(2000);
// 异步任务完成后,显式地调用CompletableFuture的complete方法
future.complete(null);
System.out.println("Async task completed and notified main thread.");
} catch (InterruptedException e) {
// 如果异步任务被中断,则调用completeExceptionally方法通知主线程异常
future.completeExceptionally(e);
}
}).start();
// 主线程等待异步任务完成
future.get(); // 这会阻塞主线程直到CompletableFuture被完成或出现异常
// 当future.get()返回时,说明异步任务已经完成
System.out.println("Main thread continues after async task completion.");
}
}