加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

新手也能看懂的 SpringBoot 异步编程指南

发布时间:2019-10-11 06:49:00 所属栏目:建站 来源:SnailClimb
导读:通过本文你可以相识到下面这些常识点: Future 模式先容以及焦点头脑 焦点线程数、最大线程数的区别,行列容量代表什么; ThreadPoolTaskExecutor 饱和计策; SpringBoot 异步编程拭魅战,搞懂代码的执行逻辑。 Future 模式 异步编程在处理赏罚耗时操纵以及多使命

其它,从上面的运行功效可以看出,当全部使命执行完成之后才返回功效。这种环境对应于我们必要返回功效给客户端哀求的环境下,若是我们不必要返回使命执行功效给客户端的话呢? 就好比我们上传一个大文件到体系,上传之后只要大文件名目切合要求我们就上传乐成。平凡环境下我们必要守候文件上传完毕再返回给用户动静,可是这样会很慢。回收异步的话,当用户上传之后就立马返回给用户动静,然后体系再冷静行止理赏罚上传使命。这样也会增进一点贫困,由于文件也许会上传失败,以是体系也必要一点机制来赔偿这个题目,好比当上传碰着题目的时辰,动员静关照用户。

下面会演示一下客户端不必要返回功效的环境:

将completableFutureTask要领变为 void 范例

  1. @Async 
  2. public void completableFutureTask(String start) { 
  3.   ...... 
  4.   //这里也许是体系对使命执行功效的处理赏罚,好比存入到数据库等等...... 
  5.   //doSomeThingWithResults(results); 

Controller 代码修改如下:

  1. @GetMapping("/movies") 
  2.  public String completableFutureTask() throws ExecutionException, InterruptedException { 
  3.    // Start the clock 
  4.    long start = System.currentTimeMillis(); 
  5.    // Kick of multiple, asynchronous lookups 
  6.    List<String> words = Arrays.asList("F", "T", "S", "Z", "J", "C"); 
  7.        words.stream() 
  8.            .forEach(word -> asyncService.completableFutureTask(word)); 
  9.    // Wait until they are all done 
  10.    // Print results, including elapsed time 
  11.    System.out.println("Elapsed time: " + (System.currentTimeMillis() - start)); 
  12.    return "Done"; 
  13.  } 

哀求这个接口,节制台打印出下面的内容:

  1. Elapsed time: 0 
  2. 2019-10-01 14:02:44.052  WARN 19051 --- [lTaskExecutor-4] g.j.a.service.AsyncService               : My ThreadPoolTaskExecutor-4start this task! 
  3. 2019-10-01 14:02:44.052  WARN 19051 --- [lTaskExecutor-3] g.j.a.service.AsyncService               : My ThreadPoolTaskExecutor-3start this task! 
  4. 2019-10-01 14:02:44.052  WARN 19051 --- [lTaskExecutor-2] g.j.a.service.AsyncService               : My ThreadPoolTaskExecutor-2start this task! 
  5. 2019-10-01 14:02:44.052  WARN 19051 --- [lTaskExecutor-1] g.j.a.service.AsyncService               : My ThreadPoolTaskExecutor-1start this task! 
  6. 2019-10-01 14:02:44.052  WARN 19051 --- [lTaskExecutor-6] g.j.a.service.AsyncService               : My ThreadPoolTaskExecutor-6start this task! 
  7. 2019-10-01 14:02:44.052  WARN 19051 --- [lTaskExecutor-5] g.j.a.service.AsyncService               : My ThreadPoolTaskExecutor-5start this task! 

可以看到体系会直接返回给用户功效,然后体系才真正开始执利用命。

待办

  • Future vs. CompletableFuture
  • 源代码说明

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读