成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java8 parallelStream并行流

IT那活兒 / 564人閱讀
Java8 parallelStream并行流

點擊上方“IT那活兒”公眾號,關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了!??!


背景介紹

在我們開發(fā)的過程中,會遇到數(shù)據(jù)處理的情況,那么經(jīng)常會用到for循環(huán)、java8的流處理等。
對于小數(shù)據(jù)量來說,for循環(huán)已經(jīng)滿足了需求,但是對于大數(shù)據(jù)量來說,for循環(huán)在處理數(shù)據(jù)的效率上就已經(jīng)顯得非常吃力。

在java8的流處理中有這么一個方法:parallelStream。初次接觸就發(fā)現(xiàn)這個方法處理大數(shù)據(jù)時非常好用,下面就來分享一下使用詳情。


對比結(jié)果

我們用幾組數(shù)據(jù)對比一下for循環(huán),java8 stream和 parallelStream處理數(shù)據(jù)的耗時。
  • For循環(huán)
  • Java8 stream和parallelStream

從上圖我們可以看出,在相同的數(shù)據(jù)下,增強(qiáng)型for循環(huán)用時最長;java8 stram耗時次之,java8 parallelStream耗時最短。Stream在寫法上較for循環(huán)精練很多,并且效率上也有相應(yīng)的提升。而parallelStream其實是Stream的升級版,stream是串行操作,而parallelStream支持并行操作,從而提高程序運行效率。


深入了解

Java8的paralleStream用fork/join框架提供了并發(fā)執(zhí)行能力。研究源碼(這里就不細(xì)說源碼了),通過paralleStream的foreach我們找到ForEachTask 類,我們可以用圖形解釋一下其所繼承/實現(xiàn)的類之間的關(guān)系。

相信經(jīng)常使用線程的朋友看到這里基本我們理解到paralleStream的原理了,其使用到future來合并多線程異步結(jié)果。
正如fork/join框架的思想,這里我用圖形簡單描述一下。
Fork/Join框架的基本思想就是將一個大任務(wù)分解(Fork)成一系列子任務(wù),子任務(wù)可以繼續(xù)往下分解,當(dāng)多個不同的子任務(wù)都執(zhí)行完成后,可以將它們各自的結(jié)果合并(Join)成一個大結(jié)果,最終合并成大任務(wù)的結(jié)果,即第一步是拆分,第二步是分開運算,第三步是合并。
這樣我們就清楚了paralleStream效率提升的密碼了。

總 結(jié)

1. 在大數(shù)據(jù)量的情況下,我們優(yōu)先考慮paralleStream,數(shù)據(jù)量小用paralleStream完全沒必要,而且耗內(nèi)存。
2. 在使用paralleStream并行流的時候是無法保證元素的順序的,也就是即使你用了同步集合也只能保證元素都正確但無法保證其中的順序。


本文作者:段席超(上海新炬王翦團(tuán)隊)

本文來源:“IT那活兒”公眾號

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/129156.html

相關(guān)文章

  • Java8(stream)操作

    摘要:串行與并行可以分為串行與并行兩種,串行流和并行流差別就是單線程和多線程的執(zhí)行。返回串行流返回并行流和方法返回的都是類型的對象,說明它們在功能的使用上是沒差別的。唯一的差別就是單線程和多線程的執(zhí)行。 Stream是什么 Stream是Java8中新加入的api,更準(zhǔn)確的說: Java 8 中的 Stream 是對集合(Collection)對象功能的增強(qiáng),它專注于對集合對象進(jìn)行各種非常便...

    yacheng 評論0 收藏0
  • 樂字節(jié)-Java8新特性之Stream(上)

    摘要:需要注意的是很多流操作本身就會返回一個流,所以多個操作可以直接連接起來,如下圖這樣,操作可以進(jìn)行鏈?zhǔn)秸{(diào)用,并且并行流還可以實現(xiàn)數(shù)據(jù)流并行處理操作。為集合創(chuàng)建并行流。 上一篇文章,小樂給大家介紹了《Java8新特性之方法引用》,下面接下來小樂將會給大家介紹Java8新特性之Stream,稱之為流,本篇文章為上半部分。 1、什么是流? Java Se中對于流的操作有輸入輸出IO流,而Jav...

    dingda 評論0 收藏0
  • java8系列」式編程Stream

    摘要:前言系列神秘的系列神奇的函數(shù)式接口繼上兩篇之后,本文已經(jīng)系列的第三篇了。相反,他們會返回一個持有結(jié)果的新。操作是延遲執(zhí)行的。截斷流,使其元素不超過給定數(shù)量。返回流中元素總數(shù)。返回流中最大值。 前言 「Java8系列」神秘的Lambda「Java8系列」神奇的函數(shù)式接口繼上兩篇之后,本文已經(jīng)java8系列的第三篇了。本篇文章比較長,但我希望大家都能認(rèn)真讀完。讀不完可以先收藏,在找時間讀。...

    bovenson 評論0 收藏0
  • Stream與Lambda表達(dá)式(一) 雜談

    摘要:一流轉(zhuǎn)換為數(shù)組集合陳楊將流轉(zhuǎn)換為數(shù)組將流轉(zhuǎn)換為數(shù)組將流轉(zhuǎn)換為集合將流轉(zhuǎn)換為集合解析 一、流 轉(zhuǎn)換為數(shù)組、集合 package com.java.design.java8.Stream; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context...

    Harpsichord1207 評論0 收藏0
  • Java8-

    摘要:因此,使用并行流需要考慮以下幾點數(shù)據(jù)量將問題分解之后并行化處理,再將結(jié)果合并會帶來額外的開銷。 目錄 簡介 用法 例子 注意點 一. 簡介 流是Java8引入的一個新特性,提供了對集合元素一系列便捷的操作,可以用很少的代碼實現(xiàn)復(fù)雜的功能。流有兩大類,分別是對象流(Stream),基本數(shù)據(jù)流(IntStream、LongStream、DoubleStream)。 二.用法 流的使用通...

    whinc 評論0 收藏0
  • Java8實戰(zhàn)》-第四章讀書筆記(引入Stream)

    摘要:內(nèi)部迭代與使用迭代器顯式迭代的集合不同,流的迭代操作是在背后進(jìn)行的。流只能遍歷一次請注意,和迭代器類似,流只能遍歷一次。 流(Stream) 流是什么 流是Java API的新成員,它允許你以聲明性方式處理數(shù)據(jù)集合(通過查詢語句來表達(dá),而不是臨時編寫一個實現(xiàn))。就現(xiàn)在來說,你可以把它們看成遍歷數(shù)據(jù)集的高級迭代器。此外,流還可以透明地并行處理,你無需寫任何多線程代碼了!我會在后面的筆記中...

    _ivan 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<