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

歡迎訪問 生活随笔!

生活随笔

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

java

Java 8 Streams API作为友好的ForkJoinPool外观

發布時間:2023/12/3 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 8 Streams API作为友好的ForkJoinPool外观 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我最喜歡Java 8的功能之一是流API。 最終,它消除了代碼中的幾乎所有循環,并使您可以編寫更具表現力和重點的代碼。

今天,我意識到它可以用于其他用途:作為ForkJoinPool一個不錯的前端。

問題:執行器樣板

假設我們要并行運行許多任務。 沒什么好說的,讓我們說它們每個都只是打印出執行線程的名稱(因此我們可以看到它并行運行)。 我們要在完成所有操作后恢復執行。

如果要使用ExecutorService并行運行一堆任務,則可能需要執行以下操作:

ExecutorService executor = Executors.newCachedThreadPool(); for (int i = 0; i < 5; i++) {executor.submit(() -> System.out.println(Thread.currentThread())); } executor.shutdown(); try {executor.awaitTermination(1, TimeUnit.SECONDS); } catch (InterruptedException ex) {// TODO handle... }

現在,這是很多代碼! 但是我們可以做得更好。

解決方案:流API

最后,我想到了這個實用程序:

void doInParallelNTimes(int times, Runnable op) {IntStream.range(0, times).parallel().forEach(i -> op.run()); }

可重復使用的一切。 像這樣稱呼它:

doInParallelNTimes(5, () -> System.out.println(Thread.currentThread()));

做完了

這打印出以下內容。 請注意,它實際上也在使用主線程-因為它仍然被扣為人質,并且在執行完成之前無法恢復。

Thread[main,5,main] Thread[ForkJoinPool.commonPool-worker-1,5,main] Thread[main,5,main] Thread[ForkJoinPool.commonPool-worker-3,5,main] Thread[ForkJoinPool.commonPool-worker-2,5,main]

另一個例子:并行計算

這是另一個例子。 我們可以使用流API并行處理許多不同的任務,而不必重復執行N次相同的操作。 我們可以創建(“種子”)具有任何集合或值集的流,對其并行執行一個函數,最后匯總結果(集合為一個集合,減少為單個值等)。

讓我們看看如何計算前45個斐波納契數的總和:

public class Tester {public static void main(String[] args) {Stopwatch stopwatch = Stopwatch.createStarted();IntStream.range(1, 45).parallel().map(Tester::fib).sum();System.out.println("Parallel took " + stopwatch.elapsed(MILLISECONDS) + " ms");stopwatch.reset();stopwatch.start();IntStream.range(1, 45).map(Tester::fib).sum();System.out.println("Sequential took " + stopwatch.elapsed(MILLISECONDS) + " ms");}private static int fib(int n) {if (n == 1 || n == 2) {return 1;} else {return fib(n - 1) + fib(n - 2);}} }

打印輸出:

Parallel took 3078 ms Sequential took 7327 ms

它在一行代碼中取得了很多成就。 首先,它創建一個流,其中包含我們要并行運行的所有任務的描述。 然后,它并行調用所有這些函數。 最后,它返回所有這些結果的總和。

并非所有人為。 我可以輕松想象創建具有任意值(包括豐富的Java對象)的流,并對它們執行非平凡的操作。 沒關系,編排所有看起來仍然相同的東西。

什么時候做?

我認為這種解決方案在所有情況下都非常有用,當您事先知道負載,并且您希望將執行分叉到多個線程并在它們全部完成后恢復。 我需要一些測試代碼,但它可能在許多其他派生/合并或分而治之方案中很好地工作。

顯然,如果您想在后臺運行某些程序并恢復執行,或者想讓后臺執行程序長時間運行,則無法使用。

翻譯自: https://www.javacodegeeks.com/2015/01/java-8-streams-api-as-friendly-forkjoinpool-facade.html

總結

以上是生活随笔為你收集整理的Java 8 Streams API作为友好的ForkJoinPool外观的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产精品久久久久久亚洲毛片 | 久久免费国产 | 麻豆网 | 999国内精品永久免费视频 | 你懂的在线观看视频 | 精品久久久久久亚洲精品 | 国产精品一区二区在线看 | 激情区| 一区二区免费在线播放 | av生活片| 国产精品一线天粉嫩av | 国产免费久久 | 天降女子在线观看 | 91丨九色丨蝌蚪丨丝袜 | 欧美另类人妖 | 成年人免费网站在线观看 | 黄色网址av | 亚洲视频在线观看免费 | 一级成人毛片 | 日韩成人在线观看视频 | 色丁香av| 日韩中文字幕在线观看 | 欧美日韩一区电影 | 美女露胸软件 | 国产一级片免费看 | jizz日本在线 | 亚洲高清网站 | 制服丝袜中文字幕在线 | 最近日韩免费视频 | 在线视频h | 午夜免费网 | 日日好av | 麻豆911| 午夜裸体性播放 | 国产尤物av| 久一精品 | 欧美在线一级 | 91国产中文字幕 | 兔费看少妇性l交大片免费 日韩高清不卡 | 欧美黄色a | 国产一区二区三区免费观看视频 | 毛片啪啪啪| 亚洲一本在线 | 漂亮人妻被中出中文字幕 | 91香焦视频 | 在线观看福利电影 | 天天干干干干干 | 97在线精品视频 | a级片免费网站 | hitomi一区二区三区精品 | 国产日本在线观看 | 亚洲欧美日韩国产综合 | 日日cao | www.99re7.com| 超碰在线人人干 | 久久免费少妇高潮99精品 | 欧美h在线观看 | 精品国产乱码久久久久久蜜柚 | 免费无码又爽又黄又刺激网站 | 欧美成人手机在线 | 国产999精品| 一区二区欧美在线观看 | 日韩性生活大片 | 肉色欧美久久久久久久免费看 | 韩国视频一区二区三区 | 97视频播放 | 国产精品久久久久久免费 | 进去里视频在线观看 | 三级影片在线播放 | 国产成人av一区二区三区在线观看 | 四虎永久在线精品 | 成人激情视频在线播放 | 伊人久久一区二区三区 | 成人欧美一区二区 | 少妇一区二区三区 | 亚洲国产图片 | 91成人看| 国产情侣免费视频 | 99re99热 | 美女激情网 | 狠狠躁日日躁夜夜躁2022麻豆 | 国产香蕉视频在线播放 | 国产精品久久国产 | a v视频在线观看 | 久久综合一区二区 | 黄色复仇草| 高跟鞋丝袜猛烈xxxx | 成人欧美一级特黄 | 免费观看在线播放 | 国产乡下妇女做爰视频 | 欧美日韩一区二区视频在线观看 | 国产在线中文字幕 | 国产在成人精品线拍偷自揄拍 | 一本综合久久 | 一区二区三区日韩电影 | 黄色午夜网站 | 各种含道具高h调教1v1男男 | 欧美99久久精品乱码影视 | 婷婷综合激情网 |