gpt4 book ai didi

java - 如何最有效地添加一些信息以在Java中使用多个线程列出?

转载 作者:行者123 更新时间:2023-12-03 13:16:50 25 4
gpt4 key购买 nike

我有一些任务,使用多线程以最有效的方式聚合来自多个链接的一些信息。链接位于某个阵列。现在,我有这样的解决方案:

Arrays.stream(link).parallel().forEach(link -> {
try {
String result = doSomeJobWithLink(link);
System.out.println(result);
} catch (IOException e) {
e.printStackTrace();
}
});

而且效果很好(工作完成了2秒钟)。

但是我不想在try块中打印结果,而是在某些列表(或其他集合)中收集结果,所以我这样做是这样的:
List<String> resultList = Collections.synchronizedList(new ArrayList<>());
Arrays.stream(link).parallel().forEach(link -> {
try {
String result = doSomeJobWithLink(link);
resultList.add(result);
} catch (IOException e) {
e.printStackTrace();
}
});
resultList.forEach(System.out::println);

但这只花了5到8秒钟,而不是2秒钟。我可以加快速度吗?

最佳答案

使用以下代码:

List<String> resultList = Arrays.stream(link).parallel().map(v -> doSomeJobWithLink(v)).collect(Collectors.toList());

通常,我们避免在流管道中尝试try-catch,但是如果您必须捕获异常,请阅读 Exception Handling in Java Streams

并且不要仅仅因为可以就使用 parallel,因为额外的开销,与没有 parallel相比,您的工作将花费更多的时间

Should I always use a parallel stream when possible?

关于java - 如何最有效地添加一些信息以在Java中使用多个线程列出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59528630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com