关于如何并行处理此处理的想法(Java8 期货)?
Ideas on how to parallelize this processing (Java8 Futures)?
我们继承了一些对期货队列进行串行处理的代码。我想通过 运行 并行处理来加快速度,但我无法弄清楚如何正确增加我们在处理时需要跟踪的成功/失败计数。
这是以前存在的:
private void flushFutures(final Queue<Future<State>> futures) {
final Map<String, Integer> someMapA = new HashMap<>();
while(!futures.isEmpty()) {
final Future<State> future = futures.poll();
final State state = future.get();
switch (state) {
case SOME_CASE_A:
// modify someMapA
break;
case SOME_CASE_B:
// modify someMapB
break;
//.....
}
}
}
所以我尝试用 a:
替换 while 循环
futures.parallelStream().forEach(future -> ...)
但这给我留下了从 lambda 中改变状态的问题。
有没有人告诉我如何更好地处理这些 futures 来做与它目前正在做的事情相同的事情,但是顺序进行,而不是将 future 乱七八糟地添加回集合中?
而不是使用 forEach
,您可以在 futures.get() 上执行 map
,然后使用并发哈希映射执行 "groupBy" 收集器。
参见:
我们继承了一些对期货队列进行串行处理的代码。我想通过 运行 并行处理来加快速度,但我无法弄清楚如何正确增加我们在处理时需要跟踪的成功/失败计数。
这是以前存在的:
private void flushFutures(final Queue<Future<State>> futures) {
final Map<String, Integer> someMapA = new HashMap<>();
while(!futures.isEmpty()) {
final Future<State> future = futures.poll();
final State state = future.get();
switch (state) {
case SOME_CASE_A:
// modify someMapA
break;
case SOME_CASE_B:
// modify someMapB
break;
//.....
}
}
}
所以我尝试用 a:
替换 while 循环futures.parallelStream().forEach(future -> ...)
但这给我留下了从 lambda 中改变状态的问题。
有没有人告诉我如何更好地处理这些 futures 来做与它目前正在做的事情相同的事情,但是顺序进行,而不是将 future 乱七八糟地添加回集合中?
而不是使用 forEach
,您可以在 futures.get() 上执行 map
,然后使用并发哈希映射执行 "groupBy" 收集器。
参见: