摘要:示例計(jì)算一組數(shù)據(jù),設(shè)置閾值為,也就是說每次計(jì)算的數(shù)量不超過個(gè)??倲?shù)總數(shù)運(yùn)行結(jié)果如下可以看出,兩次結(jié)果是一樣的。創(chuàng)建繼承的類,實(shí)現(xiàn)方法,這里主要是計(jì)算以及拆分任務(wù)合并結(jié)果。
示例
計(jì)算一組數(shù)據(jù),設(shè)置閾值為50,也就是說每次計(jì)算的數(shù)量不超過50個(gè)。
public class RecursiveTaskDemo extends RecursiveTask{ private static final int MAX = 50; private int[] arr; private int start; private int end; public RecursiveTaskDemo(int[] arr, int start, int end) { this.arr = arr; this.start = start; this.end = end; } @Override protected Integer compute() { if ((end - start) < MAX) { int sum = 0; for (int i = start; i <= end; i++) { sum += arr[i]; } return sum; } else { int mid = (end + start) / 2; RecursiveTaskDemo left = new RecursiveTaskDemo(arr, start, mid); RecursiveTaskDemo right = new RecursiveTaskDemo(arr, mid + 1, end); invokeAll(left, right); return left.join() + right.join(); } } public static void main(String[] args) { ForkJoinPool pool = new ForkJoinPool(); int[] randomArr = getRandomArr(1000); RecursiveTaskDemo task = new RecursiveTaskDemo(randomArr, 0, randomArr.length - 1); System.out.println("總數(shù)1=" + pool.invoke(task)); System.out.println("總數(shù)2=" + Arrays.stream(randomArr).parallel().sum()); } public static int[] getRandomArr(int num) { int[] arr = new int[num]; for (int i = 0; i < arr.length; i++) { arr[i] = new Random().nextInt(1000); } return arr; } }
運(yùn)行結(jié)果如下:
可以看出,兩次結(jié)果是一樣的。
創(chuàng)建ForkJoinPool對(duì)象。
創(chuàng)建繼承RecursiveTask的類,實(shí)現(xiàn)compute方法,這里主要是計(jì)算以及拆分任務(wù)、合并結(jié)果。
pool.invoke方法調(diào)用。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75257.html
摘要:思想把大任務(wù)分割成多個(gè)小任務(wù),再把小任務(wù)的結(jié)果匯總,最終得到大任務(wù)的結(jié)果。當(dāng)一個(gè)線程執(zhí)行完當(dāng)前隊(duì)列的任務(wù)時(shí),他就會(huì)去竊取其他隊(duì)列的任務(wù)來執(zhí)行。當(dāng)雙端隊(duì)列只有一個(gè)任務(wù)時(shí),線程之間會(huì)競(jìng)爭(zhēng)。 思想 把大任務(wù)分割成多個(gè)小任務(wù),再把小任務(wù)的結(jié)果匯總,最終得到大任務(wù)的結(jié)果。 步驟如下: 任務(wù)分割 結(jié)果匯總 示例圖 showImg(https://segmentfault.com/img/bVb...
摘要:大多數(shù)待遇豐厚的開發(fā)職位都要求開發(fā)者精通多線程技術(shù)并且有豐富的程序開發(fā)調(diào)試優(yōu)化經(jīng)驗(yàn),所以線程相關(guān)的問題在面試中經(jīng)常會(huì)被提到。掌握了這些技巧,你就可以輕松應(yīng)對(duì)多線程和并發(fā)面試了。進(jìn)入等待通行準(zhǔn)許時(shí),所提供的對(duì)象。 最近看到網(wǎng)上流傳著,各種面試經(jīng)驗(yàn)及面試題,往往都是一大堆技術(shù)題目貼上去,而沒有答案。 不管你是新程序員還是老手,你一定在面試中遇到過有關(guān)線程的問題。Java語言一個(gè)重要的特點(diǎn)就...
摘要:這減輕了手動(dòng)重復(fù)執(zhí)行相同基準(zhǔn)測(cè)試的痛苦,并簡(jiǎn)化了獲取結(jié)果的流程。處理項(xiàng)目的代碼并從標(biāo)有注釋的方法處生成基準(zhǔn)測(cè)試程序。用和運(yùn)行該基準(zhǔn)測(cè)試得到以下結(jié)果。同時(shí),和的基線測(cè)試結(jié)果也有略微的不同。 Java 8 已經(jīng)發(fā)布一段時(shí)間了,許多開發(fā)者已經(jīng)開始使用 Java 8。本文也將討論最新發(fā)布在 JDK 中的并發(fā)功能更新。事實(shí)上,JDK 中已經(jīng)有多處java.util.concurrent 改動(dòng),但...
摘要:框架框架簡(jiǎn)介框架是提供的一個(gè)用于并行執(zhí)行任務(wù)的框架,是一個(gè)把大任務(wù)分割成若干個(gè)小任務(wù),最終匯總每個(gè)小任務(wù)結(jié)果得到大任務(wù)結(jié)果的框架??蚣軐?shí)例需求計(jì)算的結(jié)果。 Fork/Join框架 1. Fork/Join框架簡(jiǎn)介 Fork/Join框架是java7提供的一個(gè)用于并行執(zhí)行任務(wù)的框架,是一個(gè)把大任務(wù)分割成若干個(gè)小任務(wù),最終匯總每個(gè)小任務(wù)結(jié)果得到大任務(wù)結(jié)果的框架。Fork指的就是把一個(gè)大任務(wù)...
摘要:第二步執(zhí)行任務(wù)并合并結(jié)果。使用兩個(gè)類來完成以上兩件事情我們要使用框架,必須首先創(chuàng)建一個(gè)任務(wù)。用于有返回結(jié)果的任務(wù)。如果任務(wù)順利執(zhí)行完成了,則設(shè)置任務(wù)狀態(tài)為,如果出現(xiàn)異常,則紀(jì)錄異常,并將任務(wù)狀態(tài)設(shè)置為。 1. 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一個(gè)用于并行執(zhí)行任務(wù)的框架, 是一個(gè)把大任務(wù)分割成若干個(gè)小任務(wù),最終匯總每個(gè)小任務(wù)結(jié)果后得到大任務(wù)結(jié)果的...
閱讀 667·2023-04-25 15:49
閱讀 3121·2021-09-22 15:13
閱讀 1258·2021-09-07 10:13
閱讀 3481·2019-08-29 18:34
閱讀 2562·2019-08-29 15:22
閱讀 512·2019-08-27 10:52
閱讀 689·2019-08-26 18:27
閱讀 3023·2019-08-26 13:44