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

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

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

3. 测试编写的异步要领

  1. /** @author shuang.kou */ 
  2. @RestController 
  3. @RequestMapping("/async") 
  4. public class AsyncController { 
  5.   @Autowired  
  6.   AsyncService asyncService; 
  7.  
  8.   @GetMapping("/movies") 
  9.   public String completableFutureTask() throws ExecutionException, InterruptedException { 
  10.     //开始时刻 
  11.     long start = System.currentTimeMillis(); 
  12.     // 开始执行大量的异步使命 
  13.     List<String> words = Arrays.asList("F", "T", "S", "Z", "J", "C"); 
  14.     List<CompletableFuture<List<String>>> completableFutureList = 
  15.         words.stream() 
  16.             .map(word -> asyncService.completableFutureTask(word)) 
  17.             .collect(Collectors.toList()); 
  18.     // CompletableFuture.join()要领可以获取他们的功效并将功效毗连起来 
  19.     List<List<String>> results = completableFutureList.stream().map(CompletableFuture::join).collect(Collectors.toList()); 
  20.     // 打印功效以及运行措施运行耗费时刻 
  21.     System.out.println("Elapsed time: " + (System.currentTimeMillis() - start)); 
  22.     return results.toString(); 
  23.   } 

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

  1. 2019-10-01 13:50:17.007  WARN 18793 --- [lTaskExecutor-1] g.j.a.service.AsyncService               : My ThreadPoolTaskExecutor-1start this task! 
  2. 2019-10-01 13:50:17.007  WARN 18793 --- [lTaskExecutor-6] g.j.a.service.AsyncService               : My ThreadPoolTaskExecutor-6start this task! 
  3. 2019-10-01 13:50:17.007  WARN 18793 --- [lTaskExecutor-5] g.j.a.service.AsyncService               : My ThreadPoolTaskExecutor-5start this task! 
  4. 2019-10-01 13:50:17.007  WARN 18793 --- [lTaskExecutor-4] g.j.a.service.AsyncService               : My ThreadPoolTaskExecutor-4start this task! 
  5. 2019-10-01 13:50:17.007  WARN 18793 --- [lTaskExecutor-3] g.j.a.service.AsyncService               : My ThreadPoolTaskExecutor-3start this task! 
  6. 2019-10-01 13:50:17.007  WARN 18793 --- [lTaskExecutor-2] g.j.a.service.AsyncService               : My ThreadPoolTaskExecutor-2start this task! 
  7. Elapsed time: 1010 

起首我们可以看处处理赏罚全部使命耗费的时刻或许是 1 s。这与我们自界说的 ThreadPoolTaskExecutor 有关,我们设置的焦点线程数是 6 ,然后通过通过下面的代码模仿分派了 6 个使命给体系执行。这样每个线程城市被分派到一个使命,每个使命执行耗费时刻是 1 s ,以是处理赏罚 6 个使命的总耗费时刻是 1 s。

  1. List<String> words = Arrays.asList("F", "T", "S", "Z", "J", "C"); 
  2. List<CompletableFuture<List<String>>> completableFutureList = 
  3.         words.stream() 
  4.             .map(word -> asyncService.completableFutureTask(word)) 
  5.             .collect(Collectors.toList()); 

你可以本身验证一下,试着去把焦点线程数的数目改为 3 ,再次哀求这个接口你会发明处理赏罚全部使命耗费的时刻或许是 2 s。

(编辑:湖南网)

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

热点阅读