自定義parallelStream的thread pooljava
以前咱們講到parallelStream的底層使用到了ForkJoinPool來提交任務的,默認狀況下ForkJoinPool爲每個處理器建立一個線程,parallelStream若是沒有特別指明的狀況下,都會使用這個共享線程池來提交任務。git
那麼在特定的狀況下,咱們想使用自定義的ForkJoinPool該怎麼處理呢?github
假如咱們想作一個從1到1000的加法,咱們能夠用並行stream這樣作:線程
List<Integer> integerList= IntStream.range(1,1000).boxed().collect(Collectors.toList()); ForkJoinPool customThreadPool = new ForkJoinPool(4); Integer total= integerList.parallelStream().reduce(0, Integer::sum); log.info("{}",total);
輸出結果:code
INFO com.flydean.CustThreadPool - 499500
上面的例子使用的共享的thread pool。 咱們看下怎麼使用自定義的thread pool來提交併行stream:get
List<Integer> integerList= IntStream.range(1,1000).boxed().collect(Collectors.toList()); ForkJoinPool customThreadPool = new ForkJoinPool(4); Integer actualTotal = customThreadPool.submit( () -> integerList.parallelStream().reduce(0, Integer::sum)).get(); log.info("{}",actualTotal);
上面的例子中,咱們定義了一個4個線程的ForkJoinPool,並使用它來提交了這個parallelStream。it
輸出結果:ast
INFO com.flydean.CustThreadPool - 499500
若是不想使用公共的線程池,則能夠使用自定義的ForkJoinPool來提交。class
本文的例子https://github.com/ddean2009/learn-java-streams/tree/master/stream-cust-threadpoolthread
歡迎關注個人公衆號:程序那些事,更多精彩等着您!
更多內容請訪問 www.flydean.com