CompletableFuture 开启异步线程,主线程不等待

在Java中CompletableFuture用于异步编程,异步编程是编写非阻塞的代码,运行的任务在一个单独的线程,与主线程隔离,并且会通知主线程它的进度,成功或者失败。

在这种方式中,主线程不会被阻塞,不需要一直等到子线程完成。主线程可以并行的执行其他任务。

使用这种并行方式,可以极大的提高程序的性能。

一般应用场景:在业务开发中可能会遇到调用多个第三方接口,同时要求主流程不被阻塞。

复制代码
    public static void main(String[] args) throws Exception {
        // 开启一个线程(无返回值)
        CompletableFuture<Void> voidCompletableFuture = CompletableFuture.runAsync(() -> {
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        // 开启一个线程(有返回值)
        CompletableFuture<Integer> integerCompletableFuture = CompletableFuture.supplyAsync(() -> {
            try {
                Thread.sleep(3);
                return 1;
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        {
            // do things
        }
        // 等待异步现成执行完
        CompletableFuture.allOf(integerCompletableFuture).get();
        // 等待多个异步现成执行完
        CompletableFuture.allOf(voidCompletableFuture,integerCompletableFuture).get();
        // 打印异步结果
        System.out.println(integerCompletableFuture.get());
        System.out.println("over");
    }
相关推荐
lly2024061 分钟前
并查集快速合并
开发语言
神仙别闹2 分钟前
基于 Java 的 I Don’t Wanna Be The Bugger 冒险游戏
java·开发语言·dubbo
Jinkxs2 分钟前
Java 跨域05-Spring 与 Dubbo 服务整合(协议转换)
java·spring·dubbo
季明洵3 分钟前
Java实现栈和最小栈
java·开发语言·数据结构·
阿在在7 分钟前
Dubbo 消费者是如何与 Spring 融合的?
java·spring·dubbo
金銀銅鐵11 分钟前
浅解 Junit 4 第七篇:AllDefaultPossibilitiesBuilder
java·junit·单元测试
匀泪11 分钟前
云原生(TOMCAT实验)
java·云原生·tomcat
BigGGGuardian12 分钟前
给 Spring Boot 接口加了幂等保护:Token 机制 + 结果缓存,一个注解搞定
java·开源
Kiyra12 分钟前
深入浅出远程连接:Java 后端视角下的底层原理与实践
java·开发语言
一只鹿鹿鹿15 分钟前
数据治理文档(word原件)
java·运维·spring boot·后端