list.parallelStream() 并行流如何设置并行数
时间: 2024-09-06 09:04:26 浏览: 35
Java8ParallelStream:Java 8并行流示例
5星 · 资源好评率100%
`list.parallelStream()` 是Java 8及以上版本中引入的一个方法,它能够将集合转换为并行流,从而利用多核处理器的优势来加速数据处理。默认情况下,并行流会使用`ForkJoinPool`的默认实例,该实例的并行级别通常会设置为可用处理器的数量。这通常是最优的并行级别,因为它可以根据实际的硬件和系统负载自动调整线程数量。
如果你想手动设置并行流的并行度,可以通过自定义`ForkJoinPool`来实现。例如:
```java
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class ParallelStreamExample {
public static void main(String[] args) {
// 假设有一个列表
List<Integer> numbers = IntStream.rangeClosed(1, 1000).boxed().collect(Collectors.toList());
// 自定义并行级别
int parallelism = Runtime.getRuntime().availableProcessors(); // 获取可用处理器的数量
ForkJoinPool customThreadPool = new ForkJoinPool(parallelism);
// 使用自定义的线程池来执行并行流操作
List<Integer> result = customThreadPool.submit(() ->
numbers.parallelStream()
.map(n -> n * n) // 示例操作:计算每个数字的平方
.collect(Collectors.toList())
).join();
// 输出结果
System.out.println(result);
}
}
```
注意:在使用自定义`ForkJoinPool`时,你需要确保在不再需要时关闭线程池,否则可能会导致资源泄露。另外,不建议频繁地创建和销毁线程池,因为这样会有性能开销。最好是重用线程池,或者直接使用默认的`ForkJoinPool`。
阅读全文