其它,从上面的运行功效可以看出,当全部使命执行完成之后才返回功效。这种环境对应于我们必要返回功效给客户端哀求的环境下,若是我们不必要返回使命执行功效给客户端的话呢? 就好比我们上传一个大文件到体系,上传之后只要大文件名目切合要求我们就上传乐成。平凡环境下我们必要守候文件上传完毕再返回给用户动静,可是这样会很慢。回收异步的话,当用户上传之后就立马返回给用户动静,然后体系再冷静行止理赏罚上传使命。这样也会增进一点贫困,由于文件也许会上传失败,以是体系也必要一点机制来赔偿这个题目,好比当上传碰着题目的时辰,动员静关照用户。
下面会演示一下客户端不必要返回功效的环境:
将completableFutureTask要领变为 void 范例
- @Async
- public void completableFutureTask(String start) {
- ......
- //这里也许是体系对使命执行功效的处理赏罚,好比存入到数据库等等......
- //doSomeThingWithResults(results);
- }
Controller 代码修改如下:
- @GetMapping("/movies")
- public String completableFutureTask() throws ExecutionException, InterruptedException {
- // Start the clock
- long start = System.currentTimeMillis();
- // Kick of multiple, asynchronous lookups
- List<String> words = Arrays.asList("F", "T", "S", "Z", "J", "C");
- words.stream()
- .forEach(word -> asyncService.completableFutureTask(word));
- // Wait until they are all done
- // Print results, including elapsed time
- System.out.println("Elapsed time: " + (System.currentTimeMillis() - start));
- return "Done";
- }
哀求这个接口,节制台打印出下面的内容:
- Elapsed time: 0
- 2019-10-01 14:02:44.052 WARN 19051 --- [lTaskExecutor-4] g.j.a.service.AsyncService : My ThreadPoolTaskExecutor-4start this task!
- 2019-10-01 14:02:44.052 WARN 19051 --- [lTaskExecutor-3] g.j.a.service.AsyncService : My ThreadPoolTaskExecutor-3start this task!
- 2019-10-01 14:02:44.052 WARN 19051 --- [lTaskExecutor-2] g.j.a.service.AsyncService : My ThreadPoolTaskExecutor-2start this task!
- 2019-10-01 14:02:44.052 WARN 19051 --- [lTaskExecutor-1] g.j.a.service.AsyncService : My ThreadPoolTaskExecutor-1start this task!
- 2019-10-01 14:02:44.052 WARN 19051 --- [lTaskExecutor-6] g.j.a.service.AsyncService : My ThreadPoolTaskExecutor-6start this task!
- 2019-10-01 14:02:44.052 WARN 19051 --- [lTaskExecutor-5] g.j.a.service.AsyncService : My ThreadPoolTaskExecutor-5start this task!
可以看到体系会直接返回给用户功效,然后体系才真正开始执利用命。
待办
- Future vs. CompletableFuture
- 源代码说明
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|