jdk8並行流
阿新 • • 發佈:2019-01-10
本篇介紹java8的新特性之一:並行流parallelStream。
- import java.util.ArrayList;
- import java.util.List;
- import java.util.UUID;
- import java.util.concurrent.TimeUnit;
- import org.junit.Test;
- /**
- Parallel Streams , 並行流提高效能
- 流可以是順序的也可以是並行的。順序流的操作是在單執行緒上執行的,而並行流的操作是在多執行緒上併發執行的。
- */
-
publicclass ParallelStreams {
- int max = 1000_000;
- List<String> values;
- public ParallelStreams(){
- //建立一個包含唯一元素的大容器:
- values = new ArrayList<String>();
- for(int i=max; i>0; i--){
- UUID uuid = UUID.randomUUID();
-
values.add(uuid.toString());
- }
- }
- //測試排序這些元素需要多長時間。
- //Sequential Sort, 採用順序流進行排序
- @Test
- publicvoid sequentialSort(){
- long t0 = System.nanoTime();
- long count = values.stream().sorted().count();
- System.err.println("count = " + 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: 1932 ms
- }
- //parallel Sort, 採用並行流進行排序
- @Test
- publicvoid parallelSort(){
- long t0 = System.nanoTime();
- long count = values.parallelStream().sorted().count();
- System.err.println("count = " + 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: 1373 ms 並行排序所花費的時間大約是順序排序的一半。
- }
- }