forkjion原理
forkJoin把大任务拆分成小任务,放到不同的队列中,每个队列对应一个线程进行处理
forkJoinTask 三个实现类:
RecursiveAction
无结果返回的任务
RecursiveTask
有返回结果的任务
CountedCompleter
无返回值任务,完成任务后可以触发回调
工作窃取( work-stealing )算法
闲的线程试图从繁忙线程的
deques中 窃取工作
默认情况下,每个工作线程从其自己的双端队列中获取任务。但如果自己的双端队列中的任务已经执行完毕,双端队列为空时,工作线程就会从另一个忙线程的双端队列尾部或全局入口队列中获取任务,因为这是最大概率可能找到工作的地方