您好,登錄后才能下訂單哦!
這篇文章主要介紹了Java并發(fā)編程之Fork/Join框架的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
ForkJoinTask類屬于java.util.concurrent 包下;
ForkJoinTask類下有2個子類,分別為RecursiveTask和RecursiveAction類;(lz示例中使用RecursiveTask類進(jìn)行重寫compute()方法進(jìn)行實現(xiàn)數(shù)值的累加計算)
ForkJoinTask類 將一個大的任務(wù)拆分成多個子任務(wù)進(jìn)行并行處理,最后將子任務(wù)結(jié)果合并成最后的計算結(jié)果,并進(jìn)行輸出。
示例場景:對數(shù)值進(jìn)行累加計算;
注:示例中使用ForkJoinTask類的子類(RecursiveTask類)進(jìn)行重寫compute()方法進(jìn)行實現(xiàn)數(shù)值的累加計算
1、代碼
package com.xz.thread.ForkJoin; import java.util.concurrent.ExecutionException; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; import java.util.concurrent.RecursiveTask; /** * @description: * @author: xz * @create: 2021-06-06 17:15 */ public class Demo extends RecursiveTask<Integer> { private int start;//子任務(wù)開始計算的開始值 private int end;//子任務(wù)開始計算的結(jié)束值 private static final Integer MAX_VALUE = 50; //構(gòu)造方法 public Demo(int start, int end) { this.start = start; this.end = end; } //計算 @Override protected Integer compute() { int sum =0; //如果所需要計算的數(shù)值拆分為足夠小,則進(jìn)行累加計算 if(end-start <= MAX_VALUE){ System.out.println("startValue = " + start + ";endValue = " + end); for(int i=start;i<=end;i++){ sum +=i; } }else{//否則再進(jìn)行任務(wù)拆分,拆分成2個子任務(wù) Demo d1 = new Demo(start, (start + end) / 2); Demo d2 = new Demo((start + end) / 2, end); //執(zhí)行2個子任務(wù) d1.fork(); d2.fork(); //合并子任務(wù) Integer value1= d1.join(); Integer value2= d2.join(); sum =value1+value2; } return sum; } //測試 public static void main(String[] args) throws Exception{ //ForkJoinPool主要用于實現(xiàn)“分而治之”的算法,特別是分治之后遞歸調(diào)用的函數(shù) ForkJoinPool forkJoinPool = new ForkJoinPool(); //提交一個ForkJoinTask執(zhí)行 ForkJoinTask<Integer> forkJoinTask = forkJoinPool.submit(new Demo(1,200)); System.out.println("計算結(jié)果="+forkJoinTask.get()); } }
2、運行測方法,輸出如下:
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Java并發(fā)編程之Fork/Join框架的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。