Java 8:并行 FOR 循环 [英] Java 8: Parallel FOR loop
问题描述
我听说 Java 8 提供了很多关于并发计算的实用程序.因此,我想知道并行化给定 for 循环的最简单方法是什么?
I have heard Java 8 provides a lot of utilities regarding concurrent computing. Therefore I am wondering what is the simplest way to parallelise the given for loop?
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);
}
}
推荐答案
阅读 流,它们都是新的风潮.
Read up on streams, they're all the new rage.
特别关注并行性:
具有显式 for 循环的处理元素本质上是串行的.流通过将计算重新构建为聚合操作的管道而不是对每个单独元素的命令式操作来促进并行执行.所有流操作都可以串行或串行执行并行."
"Processing elements with an explicit for-loop is inherently serial. Streams facilitate parallel execution by reframing the computation as a pipeline of aggregate operations, rather than as imperative operations on each individual element. All streams operations can execute either in serial or in parallel."
总结一下,没有并行的 for 循环,它们本质上是串行的.然而,Streams 可以完成这项工作.看看下面的代码:
So to recap, there are no parallel for-loops, they're inherently serial. Streams however can do the job. Take a look at the following code:
Set<Server> servers = getServers();
Map<String, String> serverData = new ConcurrentHashMap<>();
servers.parallelStream().forEach((server) -> {
serverData.put(server.getIdentifier(), server.fetchData());
});
这篇关于Java 8:并行 FOR 循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!