为什么我要在并行流中使用并发特性和collect:
List<Integer> list =
Collections.synchronizedList(new ArrayList<>(Arrays.asList(1, 2, 4)));
Map<Integer, Integer> collect = list.stream().parallel()
.collect(Collectors.toConcurrentMap(k -> k, v -> v, (c, c2) -> c + c2));
Run Code Online (Sandbox Code Playgroud)
并不是:
Map<Integer, Integer> collect = list.stream().parallel()
.collect(Collectors.toMap(k -> k, v -> v, (c, c2) -> c + c2));
Run Code Online (Sandbox Code Playgroud)
换句话说,不使用此特性会产生什么副作用,它对内部流操作有用吗?
我必须遍历一个列表并为每个对象调用一个方法,但要并行执行。在循环之后,还有其他语句,它们必须等待并行方法调用。我怎么能在JAVA中做到这一点?
public void a(List<Object> list) {
for(Object o : list) {
asynchMethod(o); // this n method call must run in the same time
}
// wait for all asynchMethod result
/**
* ...other statements
*/
}
private void asynchMethod(Object o) {
// some code
}
Run Code Online (Sandbox Code Playgroud)