java8学习之Stream源码分析

上一次已经将Collectors类中的各种系统收集器的源代码进行了完整的学习,而在之前咱们已经花了大量的篇幅对其Stream进行了详细的示例学习,如:

java8学习之Stream源码分析_第1张图片

那接下来则通过源代码的角度来对Stream的运作原理进行深入的学习,比如:Stream里面提供了这么多方法都是如何实现的?串行流与并行流又是如何调用的?对于并行流它又是如何利用ForkJoin这样的一个框架进行任务的切割和合并的?下面开始:

首先找开Stream类的源代码,先看一下它的定义:

java8学习之Stream源码分析_第2张图片

而它是继承了BaseStream,如下:

java8学习之Stream源码分析_第3张图片

所以,先来瞅一下BaseStream长啥样:

java8学习之Stream源码分析_第4张图片

又继承了AutoCloseable,那不又进去瞅下它呗~

java8学习之Stream源码分析_第5张图片

那它是干嘛的呢?从名字上来看是"自动关闭",可以看一下这个接口就提供了一个唯一的关闭方法,如下:

接着看一下这个接口的javadoc:

java8学习之Stream源码分析_第6张图片

java8学习之Stream源码分析_第7张图片

java8学习之Stream源码分析_第8张图片

那最终是表达一个什么意思呢?其实这是JDK1.7给咱们提供的一个简化代码的一个特性,比如说:对于文件流的操作,我们通常的做法是try里面打开,如果异常了则在catch中进行处理,使用完之后再到finally块中将打开的流给关闭掉,但是!!!这种传统的方式会有一个这样的缺陷,就是说使用者在打开流的时候可能会忘了最终将它关闭掉而造成资源上的浪费,而流如果未关的话是不会报错的,这样资源就被一直占据住了,而当这种情况越来越多的话则就会造成资源的耗尽最终造成崩溃异常,所以这个接口的推出也就是为了帮我们解决这个问题的,说起来还是有些抽象,下面用代码来说明一下:

java8学习之Stream源码分析_第9张图片

java8学习之Stream源码分析_第10张图片

接着来应用一下:

java8学习之Stream源码分析_第11张图片

接下来运行看下结果:

java8学习之Stream源码分析_第12张图片

那这个close()方法何时才被调用的呢?实际上是将try的代码块执行完之后就会自动调用close()方法,所以以后对于这种使用了某种操作之后需要将其资源关闭的功能可以尝试采用这个新的特性,让我们的代码变得更加的简单而出错率更少。

 

转载于:https://www.cnblogs.com/webor2006/p/8405511.html

你可能感兴趣的:(java8学习之Stream源码分析)