Java 8:并行 FOR 循环

我听说Java 8提供了很多关于并发计算的实用程序。因此,我想知道并行化给定for循环的最简单方法是什么?

public static void main(String[] args)
{
    Set<Server> servers = getServers();
    Map<String, String> serverData = new ConcurrentHashMap<>();

    for (Server server : servers)
    {
        String serverId = server.getIdentifier(); 
        String data = server.fetchData();

        serverData.put(serverId, data);
    }
}

答案 1

阅读,它们都是新的愤怒。

特别注意关于并行性的一点:

“具有显式 for 循环的处理元素本质上是串行的。流通过将计算重构为聚合操作的管道(而不是每个单独元素上的命令性操作)来促进并行执行。所有流操作都可以串行或并行执行。

所以回顾一下,没有并行的for循环,它们本质上是串行的。但是,流可以完成这项工作。请看下面的代码:

    Set<Server> servers = getServers();
    Map<String, String> serverData = new ConcurrentHashMap<>();

    servers.parallelStream().forEach((server) -> {
        serverData.put(server.getIdentifier(), server.fetchData());
    });

答案 2

这将使用:Stream

servers.parallelStream().forEach(server -> {
    serverData.put(server.getIdentifier(), server.fetchData());
});

我怀疑 a 可以在这里发挥更大的作用,因为你使用并发集合。Collector