相关疑难解决方法(0)

为什么我要在并行流中使用并发特性来收集?

为什么我要在并行流中使用并发特性和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 concurrency multithreading java-8 java-stream

7
推荐指数
3
解决办法
684
查看次数

并行调用 List 的方法?

我必须遍历一个列表并为每个对象调用一个方法,但要并行执行。在循环之后,还有其他语句,它们必须等待并行方法调用。我怎么能在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)

java parallel-processing asynchronous async-await

3
推荐指数
1
解决办法
1530
查看次数