上下文:我对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”的魔术迭代器伏都教,或者有人将我的示例代码提供给了我不完整,或者这里还有其他事情吗?
答案 0 :(得分:1)
我相信您对future.isDone()
方法感到困惑
isDone 它只会返回true或false
如果以任何方式(通常,异常或通过取消)完成,则返回true。
并且要对Future对象执行操作,您无需调用future.isDone()
并了解任务是否已完成
公共T get() 抛出InterruptedException, ExecutionException (您应该看到此方法)
等待将来完成,然后返回结果。
投掷:
CancellationException-如果这个未来被取消
ExecutionException-如果这个未来特别完成
InterruptedException-如果当前线程在等待时被中断