这里是需要异步的代码片段:
List<Course> courses = Lists.newArrayList();
Map<String, Map<String, Student>> result = Maps.newHashMap();
for (Map<String, Object> map : jsonObject) {
courses.add(getCourse(map, fee));
result.put(map.get(GROUP), getInfoMap(map));
}
PS:map
循环中的for-each
在两个方法调用中均未发生突变,它们仅使用信息。
如何使以上代码异步运行?有两种方法分别称为getCourse(map, fee)
和getInfoMap(map)
,要花很多时间才能依次运行它们。]
这里是需要异步的代码段:List
// start parallel operations
List<Future<Course>> coursesFut = Lists.newArrayList();
Map<String, Future<Map<String, Student>>> resultsFut = Maps.newHashMap();
for (Map<String, Object> map : jsonObjec t){
coursesFut.add(CompletableFuture.supplyAsync(() -> getCourse(map, fee)));
resultsFut.put(map.get(GROUP), CompletableFuture.supplyAsync(() -> getInfoMap(map)));
}
// collect results
List<Course> courses = Lists.newArrayList();
Map<String, Map<String, Student>> result = Maps.newHashMap();
for (Future<Course> cf : coursesFut) {
courses.add(cf.get());
}
for (Map.Entry<String, Future<Map<String, Student>> entry : resultsFut.entrySet()) {
result.put(entry.getKey(), entry.getValue().get());
}