java 最大线程数 设定_Java8 parallelStream 修改默认的线程数量
parallelStream默認使用了fork-join框架,其默認線程數是CPU核心數。
通過查閱資料,發現有兩種方法來修改默認的多線程數量:
1.全局設置
在運行代碼之前,加入如下代碼:
System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "64");
一般不建議修改,因為修改雖然改進當前的業務邏輯,但對于整個項目中其它地方只是用來做非耗時的并行流運算,性能就不友好了,因為所有使用并行流parallerStream的地方都是使用同一個Fork-Join線程池,而Fork-Join線程數默認僅為cpu的核心數。最好是自己創建一個Fork-Join線程池來用,即下面的方法2。
2.引入Fork-Join Pool
IntStream range = IntStream.range(1, 100000);
// 傳入parallelism
new ForkJoinPool(parallelism).submit(() -> range.parallel().forEach(System.out::println)).get();
因為我們創建自己的線程池,可以避免共享線程池,如果有需要,甚至可以分配比處理機數量更多的線程。
最后列舉一些使用parallelStream需要注意的地方:
1.parallelStream線程不安全問題(加鎖、使用線程安全的集合或者集合采用collect()或reduce()操作就是滿足線程安全的;
2.parallelStream 適用的場景是CPU密集型的,假如本身電腦CPU的負載很大,那還到處用并行流,那并不能起到作用,切記不要再paralelSreram操作是中使用IO流;
3.不要在多線程中使用parallelStream,原因同上類似,大家都搶著CPU是沒有提升效果,反而還會加大線程切換開銷;
本文地址:https://blog.csdn.net/lgq2016/article/details/107159256
如您對本文有疑問或者有任何想說的,請點擊進行留言回復,萬千網友為您解惑!
總結
以上是生活随笔為你收集整理的java 最大线程数 设定_Java8 parallelStream 修改默认的线程数量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java计算时间跨度_请问如何使用Jav
- 下一篇: java美元兑换,(Java实现) 美元