日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java设置并行度_控制Java并行流的并行度

發布時間:2023/12/3 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java设置并行度_控制Java并行流的并行度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java設置并行度

在掌握了這些新功能之后,隨著Java 9的最新發布,我們有了許多新功能可以用來改進我們的解決方案。 Java 9的發布也是修改我們是否掌握Java 8功能的好時機。

在這篇文章中,我想解決關于Java并行流的最常見的誤解。 人們通常說您不能以編程方式控制并行流的并行度,并行流始終在共享的ForkJoinPool.commonPool()上運行,您對此無能為力。 如果僅通過將parallel()調用添加到調用鏈來使流并行,就屬于這種情況。 在某些情況下,這可能就足夠了,例如,如果您僅對該流執行輕量級操作,但是,如果您需要對流的并行執行獲得更多控制,則您需要做的不僅僅是調用parallel()。

讓我們直接跳入自記錄示例,而不是深入研究理論和技術。

在共享的ForkJoinPool.commonPool()上處理并行流:

Set<FormattedMessage> formatMessages(Set<RawMessage> messages) {return messages.stream().parallel().map(MessageFormatter::format).collect(toSet()); }

讓我們將并行處理移到我們可以控制且不必共享的池中:

private static final int PARALLELISM_LEVEL = 8;Set<FormattedMessage> formatMessages(Set<RawMessage> messages) {ForkJoinPool forkJoinPool = new ForkJoinPool(PARALLELISM_LEVEL);try {return forkJoinPool.submit(() -> formatMessagesInParallel(messages)).get();} catch (InterruptedException | ExecutionException e) {// handle exceptions} finally {forkJoinPool.shutdown();} }private Set<FormattedMessage> formatMessagesInParallel(Set<RawMessage> messages) {return messages.stream().parallel().map(MessageFormatter::format).collect(toSet()); }

在此示例中,我們僅對ForkJoinPool的并行性級別感興趣,盡管如果需要,我們也可以控制ThreadFactory和UncaughtExceptionHandler。

ForkJoinPool調度程序將在后臺進行所有工作,包括合并工作竊取算法以提高并行處理效率。 值得一提的是,在某些情況下,例如,如果工作負載均勻地分布在工作線程上,使用ThreadPoolExecutor進行手動處理可能會更高效。

翻譯自: https://www.javacodegeeks.com/2017/11/controlling-parallelism-level-java-parallel-streams.html

java設置并行度

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java设置并行度_控制Java并行流的并行度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。