forkjion原理

forkJoin 把大任务拆分成小任务,放到不同的队列中,每个队列对应一个线程进行处理

forkJoinTask 三个实现类:

  • RecursiveAction

    无结果返回的任务

  • RecursiveTask

    有返回结果的任务

  • CountedCompleter

    无返回值任务,完成任务后可以触发回调

工作窃取( work-stealing )算法

闲的线程试图从繁忙线程的 deques 中 窃取工作

默认情况下,每个工作线程从其自己的双端队列中获取任务。但如果自己的双端队列中的任务已经执行完毕,双端队列为空时,工作线程就会从另一个忙线程的双端队列尾部或全局入口队列中获取任务,因为这是最大概率可能找到工作的地方