Java并發(fā)之Fork-Join框架

事例項(xiàng)目:https://gitee.com/silentwu/java-concurrency-tutorial

fork-join介紹

Fork/Join框架是Java 7提供的一個(gè)用于并行執(zhí)行任務(wù)的框架,是一個(gè)把大任務(wù)分割成若干個(gè)小任務(wù),最終匯總每個(gè)小任務(wù)結(jié)果后得到大任務(wù)結(jié)果的框架。Fork/Join框架要完成兩件事情:

  • 任務(wù)分割:首先Fork/Join框架需要把大的任務(wù)分割成足夠小的子任務(wù),如果子任務(wù)比較大的話還要對(duì)子任務(wù)進(jìn)行繼續(xù)分割
  • 執(zhí)行任務(wù)并合并結(jié)果:分別對(duì)分割的子任務(wù)進(jìn)行處理,然后再對(duì)所有子任務(wù)的結(jié)果進(jìn)行合并。

fork-join 框架的類架構(gòu)圖

類架構(gòu)圖
  • ForkJoinTask : 在使用的時(shí)候,我們首先需要?jiǎng)?chuàng)建一個(gè)ForkJoinTask,一般不需要繼承這個(gè)類,java 已提供了兩個(gè)類,只需要繼承他們
  1. RecursiveTask : 任務(wù)執(zhí)行之后有返回值
  2. RecursiveAction : 任務(wù)執(zhí)行之后沒(méi)有返回值
  • ForkJoinPool : 調(diào)用ForkJoinTask

偽代碼:

class Worker extend RecursiveTask<xxxx>{
        @Override
        protected xxx compute() {
            if (是否滿足條件) {
             return  executeWorker(); //執(zhí)行任務(wù) ,返回執(zhí)行結(jié)果
            }
            //不滿足條件那么就分割
            Worker worker1= new Worker();
            Worker worker2= new Worker();
            invokeAll(worker1, worker2);  //調(diào)用兩個(gè)worker, 如果不滿足條件內(nèi)部又會(huì)繼續(xù)分割
            return worker1.join() + worker2.join();
        }
}

ForkJoinPool pool = new ForkJoinPool();
pool.invoke(new Worker());


pool.shutdown();

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容