【发布时间】:2014-10-31 14:36:41
【问题描述】:
我正在使用带有并行流的最新 Java 8 lambda 处理数据。 我的代码如下:
ForkJoinPool forkJoinPool = new ForkJoinPool(10);
List<String> files = Arrays.asList(new String[]{"1.txt"});
List<String> result = forkJoinPool.submit(() ->
files.stream().parallel()
.flatMap(x -> stage1(x)) //at this stage we add more elements to the stream
.map(x -> stage2(x))
.map(x -> stage3(x))
.collect(Collectors.toList())
).get();
流从一个元素开始,但在第二阶段添加更多元素。 我的假设是这个流应该并行运行,但在这种情况下只使用一个工作线程。
如果我从 2 个元素开始(即,我将第二个元素添加到初始列表中),则生成 2 个线程来处理流等等......如果我没有明确地将流提交到ForkJoinPool。
问题是:它是记录在案的行为还是可能在实施中发生变化?有什么方法可以控制这种行为并允许更多线程而不考虑初始列表?
【问题讨论】:
标签: java parallel-processing java-8 java-stream fork-join