@ Async,Future,AsyncResult;有什么方法可以“等待”异步功能的完成

时间:2018-12-28 20:38:29

标签: java spring-boot asynchronous

上下文:我对Spring非常陌生,以前从未使用过@Async。根据电子邮件中发送给我的示例代码,我被指示重复代码的一部分。

如果要执行此操作,基于@async的文档和指南,我唯一可以告知的方法是使用Future.isDone(),并可能有一个列表,可以在“完成”时从中删除节点”,然后在列表为空时继续。

我想知道的是,是否还有其他方式可以知道何时完成“未来”?

在提供给我的示例代码中,没有位future.isDone()行。

在发出异步请求后,他们只是调用另一个函数,该函数使用for循环作为

List<List<String>> listOfList = ...//

Map<String, Set<String>> collect = listOfList.stream()
        .filter(l -> l.size() >= 2)
        .collect(Collectors.groupingBy(l -> l.get(0), Collectors.mapping(l -> l.get(1), Collectors.toSet())));

这里是否存在带有“ foreach”的魔术迭代器伏都教,或者有人将我的示例代码提供给了我不完整,或者这里还有其他事情吗?

1 个答案:

答案 0 :(得分:1)

我相信您对future.isDone()方法感到困惑

isDone 它只会返回true或false

  

如果以任何方式(通常,异常或通过取消)完成,则返回true。

并且要对Future对象执行操作,您无需调用future.isDone()并了解任务是否已完成

公共T get()       抛出InterruptedException,              ExecutionException (您应该看到此方法)

  

等待将来完成,然后返回结果。

     

投掷:

     

CancellationException-如果这个未来被取消

     

ExecutionException-如果这个未来特别完成

     

InterruptedException-如果当前线程在等待时被中断