1. 程式人生 > >Java8新特性——並行流parallelStream

Java8新特性——並行流parallelStream

今天是高考的日子,是大四師兄師姐答辯畢業的日子。一代又來,一代又去。好久沒寫部落格,藉此特殊日子整理一下前不久學java8新特性時寫的程式碼,留下痕跡。(本部落格的程式碼根據 學習整理,加上個人的理解而成,關於某個新特性的介紹程式碼裡的註釋已經闡述清楚,故不再寫文字介紹,直接看程式碼吧!)

    本篇介紹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 , 並行流提高效能
	
	流可以是順序的也可以是並行的。順序流的操作是在單執行緒上執行的,而並行流的操作是在多執行緒上併發執行的。
 */
public class 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
	public void 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
	public void 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 並行排序所花費的時間大約是順序排序的一半。
	}
}

詳情請見這篇部落格: