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 file 获取文件大小
下一篇:java finalize
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站