Fork-join框架
这是一个JDK7引入的并行框架,它把流程划分成fork(分解)+join(合并)两个步骤(怎么那么像MapReduce?),传统线程池来实现一个并行任务的时候,经常需要花费大量的时间去等待其他线程执行任务的完成,但是fork-join框架使用work stealing技术缓解了这个问题: 每个工作线程都有一个双端队列,当分给每个任务一个线程去执行的时候,这个任务会放到这个队列的头部; 当这个任务执行完毕,需要和另外一个任务的结果执行合并操作,可是那个任务却没有执行的时候,不会干等,而是把另一个任务放到队列的头部去,让它尽快执行; 当工作线程的队列为空,它会尝试从其他线程的队列尾部偷一个任务过来; 取得的任务可以被进一步分解。 ForkJoinPool.class,ForkJoin框架的任务池,ExecutorService的实现类 ForkJoinTask.class,Future的子类,框架任务的抽象 ForkJoinWorkerThread.class,工作线程 RecursiveTask.class,ForkJoinTask的实现类,compute方法有返回值,下文中有例子 RecursiveAction.class,ForkJoinTask的实现类,compute方法无返回值,只需要覆写compute方法,对于可继续分解的子任务,调用coInvoke方法完成