最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java并發(fā)編程之Fork/Join框架的理解

 更新時(shí)間:2021年06月07日 16:45:48   作者:小志的博客  
今天帶大家學(xué)習(xí)Java并發(fā)編程的相關(guān)知識(shí),文中對(duì)Fork/Join框架作了非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)有關(guān)知識(shí)的小伙伴們很有幫助,需要的朋友可以參考下

一、Fork/Join框架的理解

在這里插入圖片描述

  • ForkJoinTask類(lèi)屬于java.util.concurrent 包下;
  • ForkJoinTask類(lèi)下有2個(gè)子類(lèi),分別為RecursiveTask和RecursiveAction類(lèi);(lz示例中使用RecursiveTask類(lèi)進(jìn)行重寫(xiě)compute()方法進(jìn)行實(shí)現(xiàn)數(shù)值的累加計(jì)算)
  • ForkJoinTask類(lèi) 將一個(gè)大的任務(wù)拆分成多個(gè)子任務(wù)進(jìn)行并行處理,最后將子任務(wù)結(jié)果合并成最后的計(jì)算結(jié)果,并進(jìn)行輸出。

在這里插入圖片描述在這里插入圖片描述

二、Fork/Join框架使用示例

示例場(chǎng)景:對(duì)數(shù)值進(jìn)行累加計(jì)算;

注:示例中使用ForkJoinTask類(lèi)的子類(lèi)(RecursiveTask類(lèi))進(jìn)行重寫(xiě)compute()方法進(jìn)行實(shí)現(xiàn)數(shù)值的累加計(jì)算

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ù)開(kāi)始計(jì)算的開(kāi)始值
    private int end;//子任務(wù)開(kāi)始計(jì)算的結(jié)束值

    private static final Integer MAX_VALUE = 50;

    //構(gòu)造方法
    public Demo(int start, int end) {
        this.start = start;
        this.end = end;
    }

    //計(jì)算
    @Override
    protected Integer compute() {
        int sum =0;
        //如果所需要計(jì)算的數(shù)值拆分為足夠小,則進(jìn)行累加計(jì)算
        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個(gè)子任務(wù)
            Demo d1 = new Demo(start, (start + end) / 2);
            Demo d2 = new Demo((start + end) / 2, end);
            //執(zhí)行2個(gè)子任務(wù)
            d1.fork();
            d2.fork();
            //合并子任務(wù)
            Integer value1= d1.join();
            Integer value2= d2.join();
            sum =value1+value2;
        }

        return sum;
    }

    //測(cè)試
    public static void main(String[] args) throws Exception{
        //ForkJoinPool主要用于實(shí)現(xiàn)“分而治之”的算法,特別是分治之后遞歸調(diào)用的函數(shù)
        ForkJoinPool forkJoinPool = new ForkJoinPool();
        //提交一個(gè)ForkJoinTask執(zhí)行
        ForkJoinTask<Integer> forkJoinTask = forkJoinPool.submit(new Demo(1,200));
        System.out.println("計(jì)算結(jié)果="+forkJoinTask.get());
    }
}

2、運(yùn)行測(cè)方法,輸出如下:

在這里插入圖片描述

3、結(jié)論:

由第2步驟的輸出結(jié)果可知,先把1到200的所有數(shù)值進(jìn)行任務(wù)拆分(上圖拆分成了4部分),然后再將所有子任務(wù)結(jié)的果合并成最后的計(jì)算結(jié)果

到此這篇關(guān)于Java并發(fā)編程之Fork/Join框架的理解的文章就介紹到這了,更多相關(guān)Fork/Join框架的理解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JDBC如何獲取數(shù)據(jù)庫(kù)連接

    JDBC如何獲取數(shù)據(jù)庫(kù)連接

    這篇文章主要為大家詳細(xì)為大家詳細(xì)介紹了JDBC如何獲取數(shù)據(jù)庫(kù)連接,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • springboot實(shí)現(xiàn)后臺(tái)上傳圖片(工具類(lèi))

    springboot實(shí)現(xiàn)后臺(tái)上傳圖片(工具類(lèi))

    這篇文章主要為大家詳細(xì)介紹了springboot實(shí)現(xiàn)后臺(tái)上傳圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 快速解決Hash碰撞沖突的方法小結(jié)

    快速解決Hash碰撞沖突的方法小結(jié)

    這篇文章主要介紹了快速解決Hash碰撞沖突的方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Spring AOP實(shí)現(xiàn)Redis緩存數(shù)據(jù)庫(kù)查詢?cè)创a

    Spring AOP實(shí)現(xiàn)Redis緩存數(shù)據(jù)庫(kù)查詢?cè)创a

    這篇文章主要介紹了Spring AOP實(shí)現(xiàn)Redis緩存數(shù)據(jù)庫(kù)查詢的相關(guān)內(nèi)容,源碼部分還是不錯(cuò)的,需要的朋友可以參考下。
    2017-09-09
  • 解決idea 通過(guò)build project 手動(dòng)觸發(fā)熱部署失敗的問(wèn)題

    解決idea 通過(guò)build project 手動(dòng)觸發(fā)熱部署失敗的問(wèn)題

    在debug運(yùn)行項(xiàng)目的過(guò)程中,并且保證(不添加方法,不修改方法名)一定的規(guī)則的情況下,可以通過(guò)build project 來(lái)手動(dòng)熱部署項(xiàng)目,本文給大家介紹解決idea 通過(guò)build project 手動(dòng)觸發(fā)熱部署失敗的問(wèn)題,感興趣的朋友一起看看吧
    2023-12-12
  • Maven中<distributionManagement>的使用及說(shuō)明

    Maven中<distributionManagement>的使用及說(shuō)明

    本文主要介紹了Maven中的SNAPSHOT和RELEASE倉(cāng)庫(kù)的區(qū)別,以及如何在POM文件中配置和使用快照版本,快照版本可以實(shí)現(xiàn)實(shí)時(shí)更新,方便開(kāi)發(fā)過(guò)程中的依賴管理,同時(shí),本文還總結(jié)了Maven的一些常用命令及其作用
    2025-01-01
  • SpringBoot自動(dòng)裝配之Condition深入講解

    SpringBoot自動(dòng)裝配之Condition深入講解

    @Conditional表示僅當(dāng)所有指定條件都匹配時(shí),組件才有資格注冊(cè)。該@Conditional注釋可以在以下任一方式使用:作為任何@Bean方法的方法級(jí)注釋、作為任何類(lèi)的直接或間接注釋的類(lèi)型級(jí)別注釋@Component,包括@Configuration類(lèi)、作為元注釋?zhuān)康氖墙M成自定義構(gòu)造型注釋
    2023-01-01
  • Java中的@Cacheable注解的作用詳解

    Java中的@Cacheable注解的作用詳解

    這篇文章主要介紹了Java中的@Cacheable注解的作用詳解, 使用 @Cacheable 注解就可以將運(yùn)行結(jié)果緩存,以后查詢相同的數(shù)據(jù),直接從緩存中取,不需要調(diào)用方法,需要的朋友可以參考下
    2023-10-10
  • SpringBoot中@Scheduled()注解以及cron表達(dá)式詳解

    SpringBoot中@Scheduled()注解以及cron表達(dá)式詳解

    這篇文章主要介紹了SpringBoot中@Scheduled()注解以及cron表達(dá)式詳解,@Scheduled注解是Spring Boot提供的用于定時(shí)任務(wù)控制的注解,主要用于控制任務(wù)在某個(gè)指定時(shí)間執(zhí)行,或者每隔一段時(shí)間執(zhí)行,需要的朋友可以參考下
    2023-08-08
  • 如何基于SpringMVC實(shí)現(xiàn)斷點(diǎn)續(xù)傳(HTTP)

    如何基于SpringMVC實(shí)現(xiàn)斷點(diǎn)續(xù)傳(HTTP)

    這篇文章主要介紹了如何基于SpringMVC實(shí)現(xiàn)斷點(diǎn)續(xù)傳(HTTP),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01

最新評(píng)論

六盘水市| 视频| 和平县| 泾源县| 云霄县| 正镶白旗| 犍为县| 宁明县| 清水县| 沁源县| 安达市| 武陟县| 郁南县| 湄潭县| 开阳县| 永登县| 灵武市| 镇巴县| 北海市| 华宁县| 简阳市| 通化市| 石楼县| 保亭| 安西县| 景泰县| 京山县| 临沂市| 虹口区| 屯门区| 吉隆县| 莱西市| 繁峙县| 峨边| 调兵山市| 马公市| 眉山市| 宁晋县| 邵阳县| 邮箱| 永顺县|