java+stream+源码分析_java8学习之Stream源码分析
上一次已经将Collectors类中的各种系统收集器的源代码进行了完整的学习,而在之前咱们已经花了大量的篇幅对其Stream进行了详细的示例学习,如:
那接下来则通过源代码的角度来对Stream的运作原理进行深入的学习,比如:Stream里面提供了这么多方法都是如何实现的?串行流与并行流又是如何调用的?对于并行流它又是如何利用ForkJoin这样的一个框架进行任务的切割和合并的?下面开始:
首先找开Stream类的源代码,先看一下它的定义:
而它是继承了BaseStream,如下:
所以,先来瞅一下BaseStream长啥样:
又继承了AutoCloseable,那不又进去瞅下它呗~
那它是干嘛的呢?从名字上来看是"自动关闭",可以看一下这个接口就提供了一个唯一的关闭方法,如下:
接着看一下这个接口的javadoc:
那最终是表达一个什么意思呢?其实这是JDK1.7给咱们提供的一个简化代码的一个特性,比如说:对于文件流的操作,我们通常的做法是try里面打开,如果异常了则在catch中进行处理,使用完之后再到finally块中将打开的流给关闭掉,但是!!!这种传统的方式会有一个这样的缺陷,就是说使用者在打开流的时候可能会忘了最终将它关闭掉而造成资源上的浪费,而流如果未关的话是不会报错的,这样资源就被一直占据住了,而当这种情况越来越多的话则就会造成资源的耗尽最终造成崩溃异常,所以这个接口的推出也就是为了帮我们解决这个问题的,说起来还是有些抽象,下面用代码来说明一下:
接着来应用一下:
接下来运行看下结果:
那这个close()方法何时才被调用的呢?实际上是将try的代码块执行完之后就会自动调用close()方法,所以以后对于这种使用了某种操作之后需要将其资源关闭的功能可以尝试采用这个新的特性,让我们的代码变得更加的简单而出错率更少。
java+stream+源码分析_java8学习之Stream源码分析相关推荐
- java毕业生设计医学生在线学习交流平台计算机源码+系统+mysql+调试部署+lw
java毕业生设计医学生在线学习交流平台计算机源码+系统+mysql+调试部署+lw java毕业生设计医学生在线学习交流平台计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B ...
- 计算机毕业设计Java海南自贸港知识学习与测试(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java海南自贸港知识学习与测试(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java海南自贸港知识学习与测试(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目 ...
- java计算机毕业设计计算机公共课程学习资源管理系统源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计计算机公共课程学习资源管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计计算机公共课程学习资源管理系统源码+mysql数据库+系统+lw文档+部署 本源 ...
- 【Java】Java8特性官网学习之Stream的前世今生
前言 最近看了<数据密集型应用系统设计>,间断介绍了 命令式语言和声明式语言的区别 UNIX的 设计哲学 MapReduce编程框架 数据流引擎 函数运算符(函数式编程) 能发现Java8 ...
- java ygc逐步增加,【jvm学习笔记五】G1-YGC分析
在内存分配的时候,如果剩余空间不能满足分配的对象就会触发YGC.G1每次都会收集所有的新生代的分区,但新生代分区的数目每次可能是不一样的,这是因为G1会根据时间预测模型来调整新生代分区数目. YGC算 ...
- 推荐系统论文源码笔记——依次学习之DKN源码笔记
github地址:https://github.com/hwwang55/DKN 数据说明 raw_train.txt and raw_test.txt: user_id[TAB]news_title ...
- PHP网络在线学习云课堂源码在线教育学习云课堂源码
- 安装教程建设互刷平台销量爆款平台网站源码程序建设学习交流
安装教程建设互刷平台销量爆款平台网站源码程序建设学习交流 更多源码演示及测试账号见http://www.688880.com/chengxu.htm 其他说明:本程序是基于php架构开发,模板更简洁大 ...
- 码匠社区学习笔记(二)
所需资料 教程视频地址 Bootstrap spring模板 elasticsearch中文社区(想模仿的效果) 码云aAuth 获取授权用户的资料 github第三方授权文档 码匠社区学习笔记(二) ...
最新文章
- 2022-2028年中国版权行业深度调研及投资前景预测报告
- 面试问我,创建多少个线程合适?我该怎么说
- 开放一些3D视觉相关职位!
- http://m.blog.csdn.net/article/details?id=2630620
- 算一算是一年中的第几天
- 函数atof,atoi,atol,strtod,strtol,strtoul 描述
- 为wp博客添加html网页,WP——在博客(wordpress)中嵌入jupyter notebook
- C语言 | 基于MPU6050的卡尔曼滤波算法(代码类)
- FreeType(字体渲染引擎):支持多种字体格式(TTF,TTC等)
- JAVA识别字符串是数字(英文)还是汉字,web页面进行字符截断的帮助类
- python解密_python在加密解密中的例子(尽可能去深挖)
- Codeforces Codeforces Round #383 (Div. 2) E (DFS染色)
- win7+opencv3.0.0+vs2010 安装及配置
- java指令打印 驱动打印总结 打印不需要手动选择打印机 愿你编码半生 都不会用到
- Docker无法启动start request repeated too quickly for docker.service
- php使用grpc(windows环境下)
- 蓝牙耳机一个响一个不响怎么办
- 亚马逊中东站好做吗?这或许是迄今为止最好的回答!
- 中午午睡失眠,写了一些备忘
- 20.04Ubuntu安装桌面系统详细教程
热门文章
- Mysql的IP转换
- join 子查询 效率_MySQL查询在A表不在B表的记录
- xampp mysql登录失败_XAMPP修改mysql的root密码phpmyadmin无法登陆
- views 多个文件夹 netcore_Visual Studio 2019发布.NET Core项目部署或者独立运行的方法...
- java自动关闭吗_JAVA问题--浏览器老是自动关闭
- arcgis 投影坐标系转地理坐标系_ArcGIS的地理坐标系、大地坐标系
- osg 倾斜数据纹理_GIS数据、服务、数据库
- uniapp开发微信小程序时,报错:Now you can provide attr `wx:key` for a `wx:for` to improve performance
- vue的route懒加载
- 服务器3个w目录文件夹,第 4 章 目录服务器条目 (Sun Java System Directory Server Enterprise Edition 6.2 管理指南)...