抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

并行数组排序

Stream都有两种模式:顺序执行和并行执行。比如:

1
2
3

List <Person> people = list.getStream.collect(Collectors.toList());

并行执行为:

1
2
3

List <Person> people = list.getStream.parallel().collect(Collectors.toList());

在Java 7中已经有了Arrays.sort()方法可对对象进行排序,而在Java 8中,引入了新的并行排序,它比前者的排序速度更快,且遵循了Java 7引入的Fork/Join框架,可以把排序任务分配给线程池中可用的多个线程。 Java 8在java.util.Arrays类中新增了并行排序功能,能够更充分地利用多线程机制,最重要的方法是parallelSort(),可以显著加快多核机器上的数组排序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

package com.ehking.example.java8.newfeature.demo08;


import java.util.Arrays;
import java.util.concurrent.ThreadLocalRandom;


/**
* <p>
* 这段代码使用parallelSetAll()方法生成20000个随机数,
* <p>
* 然后使用parallelSort()方法进行排序。这个程序会输出乱序数组和排序数组的前10个元素。
*/
public class Java8ParallelArrays {


public static void main(String[] args) {


long[] arrayOfLong = new long[20000];
Arrays.parallelSetAll(arrayOfLong,
index -> ThreadLocalRandom.current().nextInt(1000000));

Arrays.stream(arrayOfLong).limit(10).forEach(
i -> System.out.print(i + " "));
System.out.println();

Arrays.parallelSort(arrayOfLong);
Arrays.stream(arrayOfLong).limit(10).forEach(
i -> System.out.print(i + " "));
System.out.println();

}

}