一、 主要算法思想: 采用了分治的思想:将一个大任务分割成不同的子任务,将线程放入不同的队列,一个线程对应一个队列。 1.“工作窃取算法”:某个线程执行完自己的队列里的任务时,会从其他队列里窃取任务来执行 2. 框架局限性: 存在竞争:双端队列里只有一个任务时 二、 应用 1. java8 中的pa ...
分类:
编程语言 时间:
2018-08-23 19:30:44
阅读次数:
157
fork():开启一个新线程(或是重用线程池内的空闲线程),将任务交给该线程处理。 join():等待该任务的处理线程处理完毕,获得返回值。 ForkJoinPool 的每个工作线程都维护着一个工作队列(WorkQueue),这是一个双端队列(Deque),里面存放的对象是任务(ForkJoinTa ...
分类:
其他好文 时间:
2018-08-17 21:34:50
阅读次数:
146
fork是把task放到workqueue[]中,join的逻辑是先去取,取不到说明这之间的功夫,被别的线程取走了,取到了自己执行task,然后判断task是不是可以完成,如果没完成,说明要么是这个task正在执行,要么是递归成子task了,反正不管怎样。 递归的所有task,需要都被完成之后,才能 ...
分类:
其他好文 时间:
2018-07-24 19:21:07
阅读次数:
199
Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork/Join框架要完成两件事情: 1.任务分割:首先Fork/Join框架需要把大的任务分割成足够小的子任务,如果子任务比较大的话还要对子任务进 ...
分类:
其他好文 时间:
2018-07-05 14:48:31
阅读次数:
172
J.U.C同步组件FutureTask、ForkJoin、BlockingQueue ...
分类:
其他好文 时间:
2018-06-29 01:08:42
阅读次数:
182
2018-06-09总结: ForkJoin确实可以很快速的去解析文件并统计关键词的数量,但是如果文件过大就会出现内存溢出,是否可以通过虚拟内存方式解决内存溢出的问题呢? ...
分类:
其他好文 时间:
2018-06-09 13:20:52
阅读次数:
165
FutureTask FutureTask是J.U.C中的类,是一个可删除的异步计算类。这个类提供了Future接口的的基本实现,使用相关方法启动和取消计算,查询计算是否完成,并检索计算结果。只有在计算完成时才能使用get方法检索结果;如果计算尚未完成,get方法将会阻塞。一旦计算完成,计算就不能重 ...
分类:
其他好文 时间:
2018-05-03 15:26:16
阅读次数:
176
转载自:https://my.oschina.net/hosee/blog/614319; 摘要: 本系列基于炼数成金课程,为了更好的学习,做了系列的记录。 本文主要介绍: 1. 线程池的基本使用 2. 扩展和增强线程池 3. ForkJoin 1. 线程池的基本使用 1.1.为什么需要线程池 平时 ...
分类:
编程语言 时间:
2018-04-25 13:12:09
阅读次数:
191
计算机的使用者一直以为他们的计算机可以同时做很多事情。他们认为当其他的应用程序在下载文件,管理打印队列或者缓冲音频的时候他们可以继续在文字处理程序上工作。甚至对于单个应用程序,他们任然期待它能在在同一时间做很多事情。举个例子,一个流媒体播放程序必须能同时完成以下工作:从网络上读取数字音频,解压缩数字 ...
分类:
数据库 时间:
2018-02-09 20:18:45
阅读次数:
276
面试中经常碰到类似问题,问题的关键我觉得是用设置一个缓冲区 还有一个思路 是通过Linux split 命令将文件直接切割成小文件,再进行处理再汇总。 或者jdk7提供的 forkjoin 框架,利用forkjoinpool管理的线程池,处理此种问题,未尝试过。 以下内容转自: http://blo ...
分类:
编程语言 时间:
2018-02-03 16:12:53
阅读次数:
344