1. 程式人生 > >jdk8並行流

jdk8並行流

    本篇介紹java8的新特性之一:並行流parallelStream。  

  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3. import java.util.UUID;  
  4. import java.util.concurrent.TimeUnit;  
  5. import org.junit.Test;  
  6. /** 
  7.     Parallel Streams , 並行流提高效能 
  8.     流可以是順序的也可以是並行的。順序流的操作是在單執行緒上執行的,而並行流的操作是在多執行緒上併發執行的。 
  9.  */
  10. publicclass ParallelStreams {  
  11.     int max = 1000_000;  
  12.     List<String> values;  
  13.     public ParallelStreams(){  
  14.         //建立一個包含唯一元素的大容器:       
  15.         values = new ArrayList<String>();  
  16.         for(int i=max; i>0; i--){  
  17.             UUID uuid = UUID.randomUUID();  
  18.             values.add(uuid.toString());              
  19.         }  
  20.     }  
  21.     //測試排序這些元素需要多長時間。
  22.     //Sequential Sort, 採用順序流進行排序
  23.     @Test
  24.     publicvoid sequentialSort(){     
  25.         long t0 = System.nanoTime();  
  26.         long count = values.stream().sorted().count();  
  27.         System.err.println("count = " + count);  
  28.         long t1 = System.nanoTime();  
  29.         long millis  = TimeUnit.NANOSECONDS.toMillis(t1 - t0);  
  30.         System.out.println(String.format("sequential sort took: %d ms", millis));    
  31.         //sequential sort took: 1932 ms
  32.     }  
  33.     //parallel Sort, 採用並行流進行排序
  34.     @Test
  35.     publicvoid parallelSort(){   
  36.         long t0 = System.nanoTime();  
  37.         long count = values.parallelStream().sorted().count();  
  38.         System.err.println("count = " + count);  
  39.         long t1 = System.nanoTime();  
  40.         long millis  = TimeUnit.NANOSECONDS.toMillis(t1 - t0);  
  41.         System.out.println(String.format("parallel sort took: %d ms", millis));    
  42.         //parallel sort took: 1373 ms 並行排序所花費的時間大約是順序排序的一半。
  43.     }  
  44. }