我正在使用最新的 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();
Run Code Online (Sandbox Code Playgroud)
该流以一个元素开始,但在第二阶段添加更多元素。我的假设是该流应该并行运行,但在这种情况下仅使用一个工作线程。
如果我从 2 个元素开始(即,我将第二个元素添加到初始列表中),则会生成 2 个线程来处理流,依此类推...如果我没有显式地将流提交到 ForkJoinPool,也会发生这种情况。
问题是:它的行为是否记录在案,或者在实施过程中可能会发生变化?有什么方法可以控制这种行为并允许更多线程,无论初始列表如何?