资讯专栏INFORMATION COLUMN

springboot 异步回调

BingqiChen / 2409人阅读

摘要:定义异步方法,使用来返回异步调用的结果开始做任务一完成任务一,当前线程,耗时毫秒任务一完成开始做任务二完成任务二,当前线程,耗时毫秒任务二完成开始做任务三完成任务三,当前线程,耗时毫秒任务三完成调用执行异步回调异步回调结束调用结果开

定义异步方法,使用Future来返回异步调用的结果
    @Async
    public Future firstTask() throws InterruptedException {
        System.out.println("开始做任务一");
        long start = System.currentTimeMillis();
        Thread.sleep(random.nextInt(10000));
        long end = System.currentTimeMillis();
        System.out.println("完成任务一,当前线程:" + Thread.currentThread().getName() + ",耗时:" + (end - start) + "毫秒");
        return new AsyncResult<>("任务一完成");
    }

    @Async
    public Future secondTask() throws InterruptedException {
        System.out.println("开始做任务二");
        long start = System.currentTimeMillis();
        Thread.sleep(random.nextInt(10000));
        long end = System.currentTimeMillis();
        System.out.println("完成任务二,当前线程:" + Thread.currentThread().getName() + ",耗时:" + (end - start) + "毫秒");
        return new AsyncResult<>("任务二完成");
    }

    @Async
    public Future thirdTask() throws InterruptedException {
        System.out.println("开始做任务三");
        long start = System.currentTimeMillis();
        Thread.sleep(random.nextInt(10000));
        long end = System.currentTimeMillis();
        System.out.println("完成任务三,当前线程:" + Thread.currentThread().getName() + ",耗时:" + (end - start) + "毫秒");
        return new AsyncResult<>("任务三完成");
    }
调用
@GetMapping("test-future")
    public void testFuture() {
        try {
            Future result1 = asyncService.firstTask();
            Future result2 = asyncService.secondTask();
            Future result3 = asyncService.thirdTask();
            while (true) {
                if (result1.isDone() && result2.isDone() && result3.isDone()) {
                    System.out.println("执行异步回调");
                    break;
                }
            }
            System.out.println("异步回调结束");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
调用结果
开始做任务一
开始做任务二
开始做任务三
完成任务二,当前线程:task-2,耗时:896毫秒
完成任务一,当前线程:task-1,耗时:7448毫秒
完成任务三,当前线程:task-3,耗时:7901毫秒
执行异步回调
异步回调结束

代码:异步回调

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77587.html

相关文章

  • springboot ListenableFuture 异步回调

    摘要:定义模拟耗时操作调用失败调用成功调用执行顺序循环循环调用成功代码异步回调 定义ListenableFuture public void getListenableFuture() { ListenableFutureTask task = new ListenableFutureTask(new Callable() { @Override ...

    caikeal 评论0 收藏0
  • SpringBoot Kotlin 系列之HTML与WebFlux

    摘要:上一章我们提到过与,对于具体的介绍没说到,这一章我在这里简单介绍一下,既然提到和,那肯定得提到什么是响应式编程,什么是。 showImg(https://segmentfault.com/img/remote/1460000018819338?w=1024&h=500); 上一章我们提到过Mono 与 Flux,对于具体的介绍没说到,这一章我在这里简单介绍一下,既然提到Mono和Flu...

    crossoverJie 评论0 收藏0
  • springboot注解总结

    摘要:解决注解不回滚检查你方法是不是的。之后新加入的注解,原来返回需要和配合。和为异步注解,放到方法上,表示调用该方法的线程与此方法异步执行,需要配合注解使用。是中的标注,是为了控制返回的字符串显示哪些字段。 @SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。 @...

    happyfish 评论0 收藏0
  • Netty(二) 从线程模型的角度看 Netty 为什么是高性能的?

    摘要:主从多线程该模型将客户端连接那一块的线程也改为多线程,称为主线程。同时也是多个子线程来处理事件响应,这样无论是连接还是事件都是高性能的。多线程提高并发效率。 showImg(https://segmentfault.com/img/remote/1460000015484190?w=1399&h=876); 前言 在之前的 SpringBoot 整合长连接心跳机制 一文中认识了 Net...

    G9YH 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<