Java 8中的流嵌套并行化

4

我有一个相当复杂的过程,需要几层嵌套的for循环。

只有在特定条件下才执行操作。换句话说:

for(){ 
    if(){ 
        for(){ 
            if(){
                //Something happens RIGHT HERE
            }
            //And maybe here
        }
    }
}

没有else语句,只有一个坚实的代码路径迭代通过许多不同类型的对象。
我的问题是,如果我用流替换这个逻辑(考虑到CPU必须执行多少操作才能完成这个周期,我认为并行处理是正确的方法),并且我有一个流在另一个流中,在最上层使用parallelstream(),那么下面的流是否仍然按顺序运行,只是在各自的线程中?
    toplevelItems.parallelstream().forEachOrdered{
       //Does this stuff run in series within as many threads as there are toplevelItems
       otherObjects.stream().forEach{
           //or Naw?
           stillOtherObjects.stream().forEach{
1个回答

1

在顶层parallelStream()以下的任何内容都将以串行方式完成。我假设您正在使用类似于List<List<>>的东西,因此您将在顶级下创建一个新流,该流与顶级流没有关联。


正确。该方法使用多个作为参数传递的列表,然后通过我使用的for循环进行迭代。但是,一旦我弄清了潜在的迭代次数,我意识到并行处理可以将我的迭代次数基本上减半甚至减少四分之一(使用2到4个核心),我认为这将节省大量时间!当然,我会进行测量,但我相信并行性是这里走的正确道路。 - TheFunk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接