JUC(一)异步调用CompletableFuture

简介: JUC(一)异步调用CompletableFuture

1. 有返回值的异步调用CompletableFuture.supplyAsync()

1. 代码示例

//有返回值的异步调用
CompletableFuture<Integer> completableFutureSupply = CompletableFuture.supplyAsync(() -> {
    System.out.println(Thread.currentThread().getName() + "  supplyAsync => Integer");
    int i = 10/1;
    return 1024;
});

2.获取返回值

System.out.println(completableFutureSupply.get());
//输出结果-> 1024

3.异步方法中报错处理

  • 这里我们模拟一下代码块中报错之后如何返回

1.写个异常(被除数为整型时不可为零

  • 我这里将被除数改成0
//有返回值的异步调用
CompletableFuture<Integer> completableFutureSupply = CompletableFuture.supplyAsync(() -> {
    System.out.println(Thread.currentThread().getName() + "  supplyAsync => Integer");
    int i = 10/0;
    return 1024;
});
  • 这里运行直接报错 (附图)

在这里插入图片描述

2. 使用whenComplete解决异常后返回值的问题

System.out.println(completableFutureSupply.whenComplete((t, u) -> {
   System.out.println("t=" + t);
   System.out.println("u=" + u);
}).exceptionally((e) -> {
    System.out.println("ex:"+e.getMessage());
    return 233;
}).get());

在这里插入图片描述

  • 这里代码依旧还是出现异常,但是我们在异常代码块中给他定义了一个报错还可以正常返回的默认值
  • t =正常返回值
  • u=异常信息
  • e=异常信息
1.无异常情况,我这边将被除数改回非0

在这里插入图片描述

2.异步调用CompletableFuture.runAsync()

CompletableFuture<Void> completableFuture = CompletableFuture.runAsync(() -> {
    try {
        TimeUnit.SECONDS.sleep(2);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println(Thread.currentThread().getName() + "  runAsync => Void");
});
completableFuture.get();//阻塞获取执行结果
//批量阻塞(等待)
CompletableFuture.allOf(completableFuture,completableFuture1).join();
相关文章
|
2月前
|
Java
JAVA并发编程系列(13)Future、FutureTask异步小王子
本文详细解析了Future及其相关类FutureTask的工作原理与应用场景。首先介绍了Future的基本概念和接口方法,强调其异步计算特性。接着通过FutureTask实现了一个模拟外卖订单处理的示例,展示了如何并发查询外卖信息并汇总结果。最后深入分析了FutureTask的源码,包括其内部状态转换机制及关键方法的实现原理。通过本文,读者可以全面理解Future在并发编程中的作用及其实现细节。
|
4月前
|
存储 缓存 安全
(八)深入并发之Runnable、Callable、FutureTask及CompletableFuture原理分析
关于Runnable、Callable接口大家可能在最开始学习Java多线程编程时,都曾学习过一个概念:在Java中创建多线程的方式有三种:继承Thread类、实现Runnable接口以及实现Callable接口。但是实则不然,真正创建多线程的方式只有一种:继承Thread类,因为只有`new Thread().start()`这种方式才能真正的映射一条OS的内核线程执行,而关于实现Runnable接口以及实现Callable接口创建出的Runnable、Callable对象在我看来只能姑且被称为“多线程任务”,因为无论是Runnable对象还是Callable对象,最终执行都要交由Threa
|
6月前
|
Java API
java多线程之FutureTask、Future、CompletableFuture
java多线程之FutureTask、Future、CompletableFuture
268 0
|
Java 调度
并发编程——Future & CompletableFuture
Java创建线程的方式,一般常用的是Thread,Runnable。如果需要当前处理的任务有返回结果的话,需要使用Callable。Callable运行需要配合Future。
58 0
|
消息中间件 Java UED
Java并发编程异步操作Future和FutureTask
生活是一个洗礼自己的过程,这个洗礼并不是传统意义上的洗礼,传统意义上的洗礼通常认为这个人的思想得到洗礼,灵魂得到洗礼,十分的清新脱俗,不世故,不圆滑,而现实的洗礼实则是让一个人褪去幼稚,褪去无知,让你变得点头哈腰,圆滑世故,我们都是动物,需要物质满足,更需要欲望填补,所以,变成自己小时候唾骂的对象也是可以理解,不过这是一个选择,你可以进行选择,只是在物欲横流的时代,多数人没有这种选择的权力!
84 0
|
Java Linux
JUC--CompletableFuture上
Future接口(FutureTask实现类)定义了操作异步任务执行一些方法,如获取异步任务的执行结果,取消任务带带执行,判断任务是否被取消,判断任务执行是否完毕等。
JUC--CompletableFuture下
简单介绍CompletableFuture
|
JavaScript Java UED
CompletableFuture 异步处理
CompletableFuture 异步处理
140 0
|
JavaScript 前端开发 Java
JUC-Java多线程Future,CompletableFuture
JUC-Java多线程Future,CompletableFuture
JUC-Java多线程Future,CompletableFuture
|
存储 Java
JUC系列(六) | Callable和Future接口详解&使用、FutureTask应用 获取异步线程返回值
JUC系列(六) | Callable和Future接口详解&使用、FutureTask应用 获取异步线程返回值
407 0
JUC系列(六) | Callable和Future接口详解&使用、FutureTask应用 获取异步线程返回值