import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureExample {
public static void main(String[] args) {
// 创建一个CompletableFuture对象,它会在future中执行一个异步任务
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 模拟一个耗时的任务
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Hello, CompletableFuture!";
});
// 当上面的任务完成时,执行后续操作
future.thenAccept(result -> {
System.out.println("Result: " + result);
});
// 为了让主线程等待异步任务的完成,我们在这里调用join方法
try {
future.join();
} catch (Exception e) {
e.printStackTrace();
}
// 另一种方式是直接获取结果,这会阻塞当前线程直到结果可用
try {
System.out.println("Direct result: " + future.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
创建 CompletableFuture
对象:
supplyAsync()
方法创建一个 CompletableFuture
对象。这个方法接受一个 Supplier
函数式接口作为参数,表示一个异步任务。Thread.sleep()
),并在完成后返回一个字符串 "Hello, CompletableFuture!"
。处理任务完成后的操作:
thenAccept()
方法来指定当异步任务完成后要执行的操作。这里我们只是简单地打印出任务的结果。等待任务完成:
join()
方法用于等待异步任务完成并返回结果。与 get()
不同,join()
不抛出异常,而是将异常封装在 CompletionException
中。get()
方法也可以用来获取结果,但它会抛出 InterruptedException
和 ExecutionException
,因此需要捕获这些异常。运行结果:
Result: Hello, CompletableFuture!
,然后输出 Direct result: Hello, CompletableFuture!
。这段代码展示了如何使用 CompletableFuture
来执行异步任务,并在任务完成后处理结果。
上一篇:java爬取网页数据
下一篇:java finalize
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站