摘要:定义异步方法,使用来返回异步调用的结果开始做任务一完成任务一,当前线程,耗时毫秒任务一完成开始做任务二完成任务二,当前线程,耗时毫秒任务二完成开始做任务三完成任务三,当前线程,耗时毫秒任务三完成调用执行异步回调异步回调结束调用结果开
定义异步方法,使用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
摘要:定义模拟耗时操作调用失败调用成功调用执行顺序循环循环调用成功代码异步回调 定义ListenableFuture public void getListenableFuture() { ListenableFutureTask task = new ListenableFutureTask(new Callable() { @Override ...
摘要:上一章我们提到过与,对于具体的介绍没说到,这一章我在这里简单介绍一下,既然提到和,那肯定得提到什么是响应式编程,什么是。 showImg(https://segmentfault.com/img/remote/1460000018819338?w=1024&h=500); 上一章我们提到过Mono 与 Flux,对于具体的介绍没说到,这一章我在这里简单介绍一下,既然提到Mono和Flu...
摘要:解决注解不回滚检查你方法是不是的。之后新加入的注解,原来返回需要和配合。和为异步注解,放到方法上,表示调用该方法的线程与此方法异步执行,需要配合注解使用。是中的标注,是为了控制返回的字符串显示哪些字段。 @SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。 @...
摘要:主从多线程该模型将客户端连接那一块的线程也改为多线程,称为主线程。同时也是多个子线程来处理事件响应,这样无论是连接还是事件都是高性能的。多线程提高并发效率。 showImg(https://segmentfault.com/img/remote/1460000015484190?w=1399&h=876); 前言 在之前的 SpringBoot 整合长连接心跳机制 一文中认识了 Net...
阅读 702·2021-11-23 09:51
阅读 2402·2021-10-11 11:10
阅读 1255·2021-09-23 11:21
阅读 1070·2021-09-10 10:50
阅读 857·2019-08-30 15:54
阅读 3294·2019-08-30 15:53
阅读 3272·2019-08-30 15:53
阅读 3169·2019-08-29 17:23