历史背景:
在2001年之前,大部分服务器都是单核的,并不是多核。(虽然ForkJoin的实现思想已经在2001年之前已经出现了),一直到jdk1.7的时候(2011年),才将ForkJoin的是实现代码加入到jdk的juc包中!(源码中的实现逻辑很复杂),因为2011年,多核cpu已经非常普遍了,并行处理有用武之地了!
1、为什么出现ForkJoin框架?
为了充分利用多核cpu的性能,并行处理任务。
2、ForkJoin和ThreadPool之间有什么关系?
ThreadPool和ForkJoin两者互补的关系。
就是有些业务场景用ThreadPool合适,有些业务场景用ForkJoin合适。
例如:实现一个非常大的数组的归并排序,这种场景,使用ForkJoin更加合适(有递归)。如果使用ThreadPool,实现的逻辑就很复杂。
3、如何使用ForkJoin的Api?
4、ForkJoin的最佳实践方式是怎样?
4.1 (不是最佳实践的方式)在任务切分的时候,每切分一个任务,都新建线程去执行,而主线程一直在等待结果返回。主线程的资源就浪费了。
(最佳实践的方式)在任务切分的时候,一边是用新建的线程去执行,另外一边的任务,都用主线程去执行。充分利用主线这个资源,节省线程数量。
5、总结
2018年写的文章
http://blog.sina.com.cn/s/blog_6f5e71b30102xfou.html
原文:https://www.cnblogs.com/vingLiu/p/12154255.html