亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Java8 parallelStream并行流

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

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


背景介紹

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

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


對(duì)比結(jié)果

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

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


深入了解

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

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

總 結(jié)

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


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

本文來(lái)源:“IT那活兒”公眾號(hào)

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/129156.html

相關(guān)文章

  • Java8(stream)操作

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

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

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

    dingda 評(píng)論0 收藏0
  • java8系列」式編程Stream

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

    bovenson 評(píng)論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 評(píng)論0 收藏0
  • Java8-

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

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

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

    _ivan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<