jdk8并行流

来源:互联网 发布:mac地址有什么用 编辑:程序博客网 时间:2024/05/21 08:53

    本篇介绍java8的新特性之一:并行流parallelStream。  

[java] view plain copy
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3. import java.util.UUID;  
  4. import java.util.concurrent.TimeUnit;  
  5.   
  6. import org.junit.Test;  
  7.   
  8. /** 
  9.     Parallel Streams , 并行流提高性能 
  10.      
  11.     流可以是顺序的也可以是并行的。顺序流的操作是在单线程上执行的,而并行流的操作是在多线程上并发执行的。 
  12.  */  
  13. public class ParallelStreams {  
  14.       
  15.     int max = 1000_000;  
  16.     List<String> values;  
  17.       
  18.     public ParallelStreams(){  
  19.         //创建一个包含唯一元素的大容器:         
  20.         values = new ArrayList<String>();  
  21.         for(int i=max; i>0; i--){  
  22.             UUID uuid = UUID.randomUUID();  
  23.             values.add(uuid.toString());              
  24.         }  
  25.     }  
  26.     //测试排序这些元素需要多长时间。  
  27.       
  28.     //Sequential Sort, 采用顺序流进行排序  
  29.     @Test  
  30.     public void sequentialSort(){     
  31.         long t0 = System.nanoTime();  
  32.           
  33.         long count = values.stream().sorted().count();  
  34.         System.err.println("count = " + count);  
  35.           
  36.         long t1 = System.nanoTime();  
  37.           
  38.         long millis  = TimeUnit.NANOSECONDS.toMillis(t1 - t0);  
  39.         System.out.println(String.format("sequential sort took: %d ms", millis));    
  40.         //sequential sort took: 1932 ms  
  41.           
  42.     }  
  43.       
  44.     //parallel Sort, 采用并行流进行排序  
  45.     @Test  
  46.     public void parallelSort(){   
  47.         long t0 = System.nanoTime();  
  48.           
  49.         long count = values.parallelStream().sorted().count();  
  50.         System.err.println("count = " + count);  
  51.           
  52.         long t1 = System.nanoTime();  
  53.           
  54.         long millis  = TimeUnit.NANOSECONDS.toMillis(t1 - t0);  
  55.         System.out.println(String.format("parallel sort took: %d ms", millis));    
  56.         //parallel sort took: 1373 ms 并行排序所花费的时间大约是顺序排序的一半。  
  57.     }  
  58. }  
原创粉丝点击