跳至主要內容

并行流

Mr.Hope...大约 1 分钟

获取并行流

我们可以通过两种方式来获取并行流。

  1. 通过List接口中的parallelStream方法来获取
  2. 通过已有的串行流转换为并行流(parallel)
List<Integer> list = new ArrayList<>();
 // 通过List 接口 直接获取并行流
Stream<Integer> integerStream = list.parallelStream();
 // 将已有的串行流转换为并行流
Stream<Integer> parallel = Stream.of(1, 2, 3).parallel();

并行流和串行流对比

LongStream.rangeClosed(0, times) 是创建一个包含指定范围内所有 long 值的有序序列的方法。

具体含义如下:

  • 0 是指定范围的起始值。
  • times 是指定范围的结束值。

这个方法会生成一个从起始值到结束值(包括结束值)的有序序列,每个值都是 long 类型。

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.stream.LongStream;

public class StreamAPITest {

    private static final long times = 500000000;
    private long start;

    @Before
    public void before() {
        start = System.currentTimeMillis();
    }

    @After
    public void end() {
        long end = System.currentTimeMillis();
        System.out.println("消耗时间:" + (end - start));
    }

    /**
     * 普通for循环 消耗时间:138
     */
    @Test
    public void test01() {
        System.out.println("普通for循环:");
        long res = 0;
        for (int i = 0; i < times; i++) {
            res += i;
        }
        System.out.println(res);
    }

    /**
     * 串行流处理
     * 消耗时间:107
     */
    @Test
    public void test02() {
        System.out.println("串行流:serialStream");
        long reduce = LongStream.rangeClosed(0, times)
                .reduce(0, Long::sum);
        System.out.println(reduce);

    }

    /**
     * 并行流处理 消耗时间:84
     */
    @Test
    public void test03() {
        System.out.println("并行流:parallelStream");
        long reduce = LongStream.rangeClosed(0, times)
                .parallel()
                .reduce(0, Long::sum);
        System.out.println(reduce);
    }

}