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");
    }
相关推荐
sszdlbw2 分钟前
后端springboot框架入门学习--第一篇
java·spring boot·学习
消失的旧时光-19434 分钟前
用 C 实现一个简化版 MessageQueue
c语言·开发语言
小鹿学程序5 分钟前
jdk配置完之后java -version还是默认的jdk版本如何更改
java·开发语言·python
至善迎风6 分钟前
Bun:下一代 JavaScript 运行时与工具链
开发语言·javascript·ecmascript·bun
她说彩礼65万8 分钟前
C# 反射
java·算法·c#
程序员-King.9 分钟前
【Qt开源项目】— ModbusScope-day 5
开发语言·qt
老秦包你会15 分钟前
QT第五课------QT系统相关------线程
开发语言·qt
hhy_smile15 分钟前
Android 与 java 设计笔记
android·java·笔记
lkbhua莱克瓦2420 分钟前
IO练习——网络爬虫(爬取数据)
java·开发语言·爬虫·io流练习·java练习
喇一渡渡20 分钟前
Java力扣---滑动窗口(1)
java·算法·排序算法