自定義parallelStream的thread pool

自定義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

使用自定義ForkJoinPool

上面的例子使用的共享的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
相關文章
相關標籤/搜索