国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java8 中的ParallelStream

Java8 中的ParallelStream

2022-02-24 13:35onlythinking Java教程

這篇文章主要介紹了Java8 中的并行流 ParallelStreams,Java8并行流ParallelStream和Stream的區別就是支持并行執行,提高程序運行效率。下面就來看看文章內容具體介紹吧

前言:

并行編程勢不可擋,Java從1.7開始就提供了Fork/Join 支持并行處理。java1.8 進一步加強。

并行處理就是將任務拆分子任務,分發給多個處理器同時處理,之后合并。

Java8 中的ParallelStream

 

1、Stream API

Java 8 引入了許多特性,Stream API是其中重要的一部分。區別 InputStream OutputStreamStream API 是處理對象流而不是字節流。

執行原理如下,流分串行和并行兩種執行方式

Java8 中的ParallelStream

// 串行執行流
stream().filter(e -> e > 10).count();
// 并行執行流
.parallelStream().filter(e -> e > 10).count()

 

2、ParallelStreams執行原理

并行執行時,java將流劃分為多個子流,分散在不同CPU并行處理,然后進行合并。

Java8 中的ParallelStream

并行一定比串行更快嗎?這不一定,取決于兩方面條件:

  • 處理器核心數量,并行處理核心數越多自然處理效率會更高。
  • 處理的數據量越大,優勢越強。這也很好理解,比如十個人干一個人就能完成的活兒會比它自己干更便宜?

 

3、ParallelStreams注意事項

使用并行流時,不要使用collectors.groupingBy,collectors.toMap,替代為

collectors.groupingByConcurrent , collectors.toConcurrentMap,或直接使用串行流。

原因,并行流執行時,通過操作Key來合并多個map的操作比較昂貴。詳細大家可以查看官網介紹。

Java8 中的ParallelStream

https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html#concurrent_reduction

Map<String, List<Person>> byGender = 
  roster
   .stream()
   .collect(Collectors.groupingBy(Person::getGender));

ConcurrentMap<String, List<Person>> byGender =         
  roster
   .parallelStream()
   .collect(Collectors.groupingByConcurrent(Person::getGender));

ParallelStreams 默認使用 ForkJoinPool.commonPool()線程池。

注意:默認情況下,你寫的 ParallelStreams 都是通過該線程池調度執行,整個應用程序都共享這個線程池。

看一個例子,我們查詢一批新聞數據,可以利用并行化來處理遠程新聞下載。

public List<News> queryNews(Stream<String> ids) {
     return ids.parallel()
            .map(this::getNews) // 網絡操作,新聞下載
            .collect(toList());
}

因為是網絡操作,存在很多不確定性,假如某個任務運行時間較長,導致線程池資源占據,阻塞其它線程,這樣就阻止了其他的并行流任務正常進行。

如果解決這個問題的其中一種方式,進行線程池隔離。那么如何自定義并行流的線程池呢?

ForkJoinPool 構造參數我們默認設置為CPU核心數。

ForkJoinPool customThreadPool = new ForkJoinPool(4);
long actualTotal = customThreadPool
  .submit(() -> roster.parallelStream().reduce(0, Integer::sum)).get();


總結:

Java 1.8 提供的Stream API簡化了代碼,很好用。不過在使用過程中應該注意以上問題。

到此這篇關于Java8 中的并行流 ParallelStreams的文章就介紹到這了,更多相關Java8 ParallelStreams內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.onlythinking.com/2020/06/05/%E4%BD%A0%E5%9C%A8%E4%BD%BF%E7%94%A8java-8-parallel-streams-%E5%90%97%EF%BC%9F/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久av网 | 久久久久久国产精品美女 | 亚洲一区二区视频在线观看 | 国产精品99久久久久久动医院 | 亚洲午夜视频 | 日韩亚洲一区二区 | 欧美中文字幕一区二区三区亚洲 | 欧美在线观看免费观看视频 | 久热国产视频 | 国产在线一二三区 | 成人国产精品久久 | 色欧美片视频在线观看 | 99精品一区二区三区 | 综合导航 | 欧美日韩精品综合 | 国产午夜视频 | 久久久久亚洲 | 国产高清视频在线 | 久久久久久久久久久久久久免费看 | 在线播放亚洲 | 欧美 日韩 中文字幕 | 久久精品久久综合 | 免费成人在线观看 | 国产欧美日韩一区 | 欧美日韩一级视频 | 亚洲国产综合在线观看 | 亚洲欧美一区二区三区不卡 | 美女一级 | 久久精品国产精品青草 | 黄色免费在线观看 | 亚洲一区二区三区久久久 | 依依成人综合网 | 视频在线一区二区 | 欧美一区二区三区久久久久久桃花 | 在线观看中文字幕 | 51ⅴ精品国产91久久久久久 | 黑人中文字幕一区二区三区 | 国产精品久久久久久久久久久久久 | 黄色国产| 中文国产在线观看 | 午夜影院啊啊啊 |