# Parallel Streams
像上面所說的,流操作可以是順序的,也可以是并行的。順序操作通過單線程執行,而并行操作則通過多線程執行。
下面的例子就演示了如何使用并行流進行操作來提高運行效率,代碼非常簡單。
首先我們創建一個大的list,里面的元素都是唯一的:
```
int max = 1000000;
List<String> values = new ArrayList<>(max);
for (int i = 0; i < max; i++) {
UUID uuid = UUID.randomUUID();
values.add(uuid.toString());
}
```
現在,我們測量一下對這個集合進行排序所使用的時間。
#### 順序排序
```
long t0 = System.nanoTime();
long count = values.stream().sorted().count();
System.out.println(count);
long t1 = System.nanoTime();
long millis = TimeUnit.NANOSECONDS.toMillis(t1 - t0);
System.out.println(String.format("sequential sort took: %d ms", millis));
// sequential sort took: 899 ms
```
#### 并行排序
```
long t0 = System.nanoTime();
long count = values.parallelStream().sorted().count();
System.out.println(count);
long t1 = System.nanoTime();
long millis = TimeUnit.NANOSECONDS.toMillis(t1 - t0);
System.out.println(String.format("parallel sort took: %d ms", millis));
// parallel sort took: 472 ms
```
如你所見,所有的代碼段幾乎都相同,唯一的不同就是把stream()改成了parallelStream(), 結果并行排序快了50%。