Java8中可以在接口不变的情况下,将流改为并行流,这样很自然地使用多线程进行集合中的数据处理。并行化操作流只需要改变一个方法调用,如果已经是一个Stream对象,调用它的parallel方法就能让其拥有并行操作的能力;如果想从一个集合类创建一个流,调用parallelStream就能立即获得一个拥有并行能力的流。
简单的例子,统计1~1000000内所有的质数的数量。
- //判断一个数是否为质数,是返回true,不是返回false
- private static boolean isPrime(int number) {
- int x = number;
- if (x < 2) {
- return false;
- }
- for (int i = 2; i <= Math.sqrt(x); ++i) {
- if (x % i == 0) {
- return false;
- }
- }
- return true;
- }
使用函数式编程统计给定范围内所有的质数。(串行操作)
- long count = IntStream.range(1,1000000).filter(Test::isPrime).count();
使用函数式编程统计给定范围内所有的质数。(并行操作)
- //parallel()方法得到一个并行流,在并行流上进行过滤
- long count = IntStream.range(1,1000000).parallel().filter(Test::isPrime).count();
输出结果:采用并行流操作方式时间是串行操作的时间一半不到。
78498
串行用的时间------212
78498
串行用的时间------39