Fork/Join框架论文笔记和总结
前言
这篇blog主要是在看了Doug Lea的fork/join实现的paper之后的一个总结.
文章主要参考了:
- A Java Fork/Join Framework(PDF)
- Java Fork/Join框架–翻译
- Overview of package util.concurrent Release 1.3.4.(Doug Lea的fork/join代码实现)
整个paper笔记的思维导图就是上面的图片,这里也留一下xmind文件链接: fork-join.xmind
代码
由于paper以及翻译对实现的思路讲解已经很详细了,这里就不再赘述,主要还是结合代码实现再看一下整个框架.
就像论文中提到的,Java部分的实现主要为下面三个类:
- FJTask(implement Runnable)
- FJTaskRunner(extends Thread)
- FJTaskRunnerGroup
下面就分别看一下三个类的代码实现.
FJTask
fork/join代码都非常的简单,因为这只是一个实现了Runnable接口的轻量线程类
1 | // 下面贴出来的是论文中讲到的FJTask有的方法,其余的一些辅助的方法也就不加进来了 |
FJTaskRunner
这个类是整个fork/join框架的核心,代码也比较多
push
1 | /** |
pop
1 | /** |
take
1 | /** |
剩下的代码就是对dqueue的resize和一些辅助的函数
FJTaskRunnerGroup
主要是对FJTaskRunner的管理的一些辅助函数
1 | /** The threads in this group **/ |
whats else
首先,Doug Lea的论文真的很牛逼,可以说把整个框架的实现细节都讲的很清楚了,而且在代码中无处不在的各种注释也对于框架的理解非常有用.在源码包里还有对应生产的JavaDoc可以说阅读Java基础代码的整体体验都是非常不错的(集合包中的注释也是非常的完整).
其次,最近开始尝试使用思维导图来整理知识,这算是第一次尝试,总体感觉还是很不错的.