java+stream+源码分析_java8学习之Stream源码分析
上一次已經(jīng)將Collectors類中的各種系統(tǒng)收集器的源代碼進(jìn)行了完整的學(xué)習(xí),而在之前咱們已經(jīng)花了大量的篇幅對其Stream進(jìn)行了詳細(xì)的示例學(xué)習(xí),如:
那接下來則通過源代碼的角度來對Stream的運(yùn)作原理進(jìn)行深入的學(xué)習(xí),比如:Stream里面提供了這么多方法都是如何實(shí)現(xiàn)的?串行流與并行流又是如何調(diào)用的?對于并行流它又是如何利用ForkJoin這樣的一個(gè)框架進(jìn)行任務(wù)的切割和合并的?下面開始:
首先找開Stream類的源代碼,先看一下它的定義:
而它是繼承了BaseStream,如下:
所以,先來瞅一下BaseStream長啥樣:
又繼承了AutoCloseable,那不又進(jìn)去瞅下它唄~
那它是干嘛的呢?從名字上來看是"自動(dòng)關(guān)閉",可以看一下這個(gè)接口就提供了一個(gè)唯一的關(guān)閉方法,如下:
接著看一下這個(gè)接口的javadoc:
那最終是表達(dá)一個(gè)什么意思呢?其實(shí)這是JDK1.7給咱們提供的一個(gè)簡化代碼的一個(gè)特性,比如說:對于文件流的操作,我們通常的做法是try里面打開,如果異常了則在catch中進(jìn)行處理,使用完之后再到finally塊中將打開的流給關(guān)閉掉,但是!!!這種傳統(tǒng)的方式會(huì)有一個(gè)這樣的缺陷,就是說使用者在打開流的時(shí)候可能會(huì)忘了最終將它關(guān)閉掉而造成資源上的浪費(fèi),而流如果未關(guān)的話是不會(huì)報(bào)錯(cuò)的,這樣資源就被一直占據(jù)住了,而當(dāng)這種情況越來越多的話則就會(huì)造成資源的耗盡最終造成崩潰異常,所以這個(gè)接口的推出也就是為了幫我們解決這個(gè)問題的,說起來還是有些抽象,下面用代碼來說明一下:
接著來應(yīng)用一下:
接下來運(yùn)行看下結(jié)果:
那這個(gè)close()方法何時(shí)才被調(diào)用的呢?實(shí)際上是將try的代碼塊執(zhí)行完之后就會(huì)自動(dòng)調(diào)用close()方法,所以以后對于這種使用了某種操作之后需要將其資源關(guān)閉的功能可以嘗試采用這個(gè)新的特性,讓我們的代碼變得更加的簡單而出錯(cuò)率更少。
總結(jié)
以上是生活随笔為你收集整理的java+stream+源码分析_java8学习之Stream源码分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 航空购票系统源码java_航空售票系统
- 下一篇: java动态规划算阶乘_动态规划算法