GitChat连接
https://gitbook.cn/gitchat/activity/5f8fc6cd1f577d4d9f428562
简介
从底层,从原理,我们来重学一次 Java。Stream 是JDK8中新引入的,方便了数据列表的过滤、投影、遍历等各种处理,他的源码及实现是怎样的呢?
本系列秉承所有结论尽量从源码中来,没有源码的尽量标明出处。相关源码会附着在文章中,读本文即可,不用再自行查找源码及资料学习,方便大家充分利用路上的碎片时间。
本篇 Chat 分析了并行 forEach 各种情况的源码逻辑,以及流标记类StreamOpFlag,帮助大家深入理解和学习 JDK 源码。
本文包含以下内容:
- 并行forEach
- AbstractPipeline.parallel()
- ReferencePipeline.Head.forEach(Consumer<? super E_OUT> action)
- AbstractPipeline.isParallel()
- ReferencePipeline.forEach(Consumer<? super E_OUT> action)
- AbstractPipeline.evaluate
- ForEachOps.ForEachOp.evaluateParallel
- ForEachTask
- ForkJoinTask.invoke
- ForkJoinTask.doInvoke
- ForkJoinTask.doExec
- CountedCompleter.exec
- ForEachTask.compute
- Spliterators.ArraySpliterator
- AbstractPipeline.copyInto
- ForEachOp.OfRef
- 拆分任务的执行
- ForkJoinWorkerThread.run
- ForkJoinPool.runWorker
- ForkJoinPool.WorkQueue.runTask
- ForkJoinTask.doExec()
- CountedCompleter.exec
- 堆栈信息
- 并行进行一次中间操作的forEach
- ReferencePipeline.filter
- ReferencePipeline.forEach(Consumer<? super E_OUT> action)
- AbstractPipeline.evaluate
- ForEachOps.ForEachOp.evaluateParallel
- ForEachTask
- ForkJoinTask.invoke
- ForkJoinTask.doInvoke
- ForkJoinTask.doExec
- CountedCompleter.exec
- ForEachTask.compute
- Spliterators.ArraySpliterator
- AbstractPipeline.copyInto
- Spliterators.ArraySpliterator.forEachRemaining
- ForEachOp.OfRef
- 拆分任务的执行
- ForkJoinWorkerThread.run
- ForkJoinPool.runWorker
- ForkJoinPool.WorkQueue.runTask
- ForkJoinTask.doExec()
- CountedCompleter.exec
- 堆栈信息
- StreamOpFlag
- 创建流标记
- 处理流时判断
- 类定义
- 说明
- 枚举值
- DISTINCT
- SORTED
- ORDERED
- SIZED
- 保留位
- SHORT_CIRCUIT
- Type
- 标志int常量
- set(Type t)
- MaskBuilder
- 掩码表
- 获取特征
- 判断函数
- 掩码
- 标记
- getMask(int flags)
- toCharacteristics(int streamFlags)
- fromCharacteristics(Spliterator<?> spliterator)
- fromCharacteristics(int characteristics)