国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java并發編程學習之Fork/Join 框架-RecursiveTask(二)

TerryCai / 3463人閱讀

摘要:示例計算一組數據,設置閾值為,也就是說每次計算的數量不超過個。總數總數運行結果如下可以看出,兩次結果是一樣的。創建繼承的類,實現方法,這里主要是計算以及拆分任務合并結果。

示例

計算一組數據,設置閾值為50,也就是說每次計算的數量不超過50個。

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("總數1=" + pool.invoke(task));

        System.out.println("總數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;
    }
}

運行結果如下:

可以看出,兩次結果是一樣的。

步驟

創建ForkJoinPool對象。

創建繼承RecursiveTask的類,實現compute方法,這里主要是計算以及拆分任務、合并結果。

pool.invoke方法調用。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75257.html

相關文章

  • java并發編程習之Fork/Join 框架-基本概念(一)

    摘要:思想把大任務分割成多個小任務,再把小任務的結果匯總,最終得到大任務的結果。當一個線程執行完當前隊列的任務時,他就會去竊取其他隊列的任務來執行。當雙端隊列只有一個任務時,線程之間會競爭。 思想 把大任務分割成多個小任務,再把小任務的結果匯總,最終得到大任務的結果。 步驟如下: 任務分割 結果匯總 示例圖 showImg(https://segmentfault.com/img/bVb...

    hikui 評論0 收藏0
  • 想進大廠?50個多線程面試題,你會多少?【后25題】(

    摘要:大多數待遇豐厚的開發職位都要求開發者精通多線程技術并且有豐富的程序開發調試優化經驗,所以線程相關的問題在面試中經常會被提到。掌握了這些技巧,你就可以輕松應對多線程和并發面試了。進入等待通行準許時,所提供的對象。 最近看到網上流傳著,各種面試經驗及面試題,往往都是一大堆技術題目貼上去,而沒有答案。 不管你是新程序員還是老手,你一定在面試中遇到過有關線程的問題。Java語言一個重要的特點就...

    caozhijian 評論0 收藏0
  • Java 8 的 JVM 有多快?Fork-Join 性能基準測試

    摘要:這減輕了手動重復執行相同基準測試的痛苦,并簡化了獲取結果的流程。處理項目的代碼并從標有注釋的方法處生成基準測試程序。用和運行該基準測試得到以下結果。同時,和的基線測試結果也有略微的不同。 Java 8 已經發布一段時間了,許多開發者已經開始使用 Java 8。本文也將討論最新發布在 JDK 中的并發功能更新。事實上,JDK 中已經有多處java.util.concurrent 改動,但...

    Euphoria 評論0 收藏0
  • Fork/Join框架

    摘要:框架框架簡介框架是提供的一個用于并行執行任務的框架,是一個把大任務分割成若干個小任務,最終匯總每個小任務結果得到大任務結果的框架。框架實例需求計算的結果。 Fork/Join框架 1. Fork/Join框架簡介 Fork/Join框架是java7提供的一個用于并行執行任務的框架,是一個把大任務分割成若干個小任務,最終匯總每個小任務結果得到大任務結果的框架。Fork指的就是把一個大任務...

    GitChat 評論0 收藏0
  • Fork/Join框架簡介

    摘要:第二步執行任務并合并結果。使用兩個類來完成以上兩件事情我們要使用框架,必須首先創建一個任務。用于有返回結果的任務。如果任務順利執行完成了,則設置任務狀態為,如果出現異常,則紀錄異常,并將任務狀態設置為。 1. 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一個用于并行執行任務的框架, 是一個把大任務分割成若干個小任務,最終匯總每個小任務結果后得到大任務結果的...

    W_BinaryTree 評論0 收藏0

發表評論

0條評論

TerryCai

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<