CompletabeFuture

简介: CompletabeFuture

怎么获得一个CompletabeFuture

用核心的四个静态方法来创建一个异步任务,不推荐使用 new CompletableFuture() 来创建。如下图所示image.png

image.png

无返回结果调用

//无返回值
public class CompeltableFutureBuildDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
//        CompletableFuture CompletableFuture = new CompletableFuture();//不推荐
        CompletableFuture<Void> voidCompletableFuture = CompletableFuture.runAsync(() -> {
            System.out.println(Thread.currentThread().getName());
            try {
                TimeUnit.MILLISECONDS.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        System.out.println(voidCompletableFuture.get());
    }
}
结果:
ForkJoinPool.commonPool-worker-1(用默认线程池)
null
public class CompeltableFutureBuildDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
//        CompletableFuture CompletableFuture = new CompletableFuture();//不推荐
        ExecutorService threadPool = Executors.newFixedThreadPool(3);
        CompletableFuture<Void> voidCompletableFuture = CompletableFuture.runAsync(() -> {
            System.out.println(Thread.currentThread().getName());
            try {
                TimeUnit.MILLISECONDS.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        },threadPool);
        System.out.println(voidCompletableFuture.get());
    }
}
结果:
pool-1-thread-1(自己的线程池的名称)
null

有返回值的调用

public class CompeltableFutureBuildDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
//        CompletableFuture CompletableFuture = new CompletableFuture();//不推荐
        ExecutorService threadPool = Executors.newFixedThreadPool(3);
        CompletableFuture<String> voidCompletableFuture = CompletableFuture.supplyAsync(() -> {
            System.out.println(Thread.currentThread().getName());
            try {
                TimeUnit.MILLISECONDS.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "hello supplyAsync";
        },threadPool);
        System.out.println(voidCompletableFuture.get());
    }
}
运行结果:
pool-1-thread-1 (自己new的线程池)
hello supplyAsync (返回结果)


目录
相关文章
|
8月前
|
Java API 数据安全/隐私保护
掌握Spring Boot中的@Validated注解
【4月更文挑战第23天】在 Spring Boot 开发中,@Validated 注解是用于开启和利用 Spring 的验证框架的一种方式,特别是在处理控制层的输入验证时。本篇技术博客将详细介绍 @Validated 注解的概念和使用方法,并通过实际的应用示例来展示如何在项目中实现有效的数据验证
228 3
|
前端开发 测试技术 API
DDD领域驱动设计实战-分层架构及代码目录结构(上)
DDD领域驱动设计实战-分层架构及代码目录结构
1551 0
DDD领域驱动设计实战-分层架构及代码目录结构(上)
|
存储 设计模式 缓存
DDD领域驱动设计实战-分层架构及代码目录结构(下)
DDD领域驱动设计实战-分层架构及代码目录结构
1731 0
DDD领域驱动设计实战-分层架构及代码目录结构(下)
|
SQL 关系型数据库 RDS
|
8月前
|
程序员
如何成为高质量程序猿与软件质量的十个指标:正确性、健壮性、可靠性、性能、易用性、清晰性、安全性、可扩展性、兼容性和可移植性
如何成为高质量程序猿与软件质量的十个指标:正确性、健壮性、可靠性、性能、易用性、清晰性、安全性、可扩展性、兼容性和可移植性
230 0
|
缓存 算法 Oracle
一文解读业务平台升级JDK11的适配之路
业务平台升级JDK11,基于两个出发点:一、jdk8于2019年1月停止维护,springboot2.1之后的版本已经兼容JDK11,springboot3.0完全放弃对JDK8的支持,未来属于更高版本的JDK;二、在试点国产化芯片的过程中,由于JDK8对Arm架构的优化不足,导致国产化芯片无法发挥自身的性能优势,为了更好的适配国产化,务必要求对JDK版本进行升级。基于上述两个出发点,业务平台于21年12月启动了对JDK版本升级的适配之路。这里回顾整个升级过程,对升级过程中的问题做一下记录
19425 13
一文解读业务平台升级JDK11的适配之路
|
8月前
|
SQL Java 数据库连接
Mybatis拦截器实现带参数SQL语句打印
Mybatis拦截器实现带参数SQL语句打印
|
关系型数据库 MySQL 分布式数据库
"Can't connect to MySQL server" 错误
"Can't connect to MySQL server" 错误
2263 2
|
消息中间件 Oracle 关系型数据库
Flink CDC (Change Data Capture)
Flink CDC (Change Data Capture) 是一种基于 Flink 的流式数据处理技术,用于捕获数据源的变化,并将变化发送到下游系统。Flink CDC 可以将数据源的变化转换为流式数据,并实时地将数据流发送到下游系统,以便下游系统及时处理这些变化。
665 1
|
运维 Cloud Native 知识图谱
2022藏经阁年度电子书榜单出炉!技术干货实战精华一手掌握!
阿里云开发者社区藏经阁,汇聚阿里工程师精华实战,累计上线400余本电子书,近8000份技术资料。上架至今,已有近200万次下载,1000万次阅读,20万人评论。点击直达https://developer.aliyun.com/ebook/
3575 3
2022藏经阁年度电子书榜单出炉!技术干货实战精华一手掌握!