Java8新特性——並行流parallelStream
阿新 • • 發佈:2019-01-07
今天是高考的日子,是大四師兄師姐答辯畢業的日子。一代又來,一代又去。好久沒寫部落格,藉此特殊日子整理一下前不久學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 並行排序所花費的時間大約是順序排序的一半。 } }
詳情請見這篇部落格: