亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java線程池ForkJoinPool實(shí)例解析

 更新時(shí)間:2020年02月04日 10:38:03   作者:塵世間迷茫的小書(shū)童  
這篇文章主要介紹了Java線程池ForkJoinPool實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了Java線程池ForkJoinPool實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

背景:ForkJoinPool的優(yōu)勢(shì)在于,可以充分利用多cpu,多核cpu的優(yōu)勢(shì),把一個(gè)任務(wù)拆分成多個(gè)“小任務(wù)”,把多個(gè)“小任務(wù)”放到多個(gè)處理器核心上并行執(zhí)行;當(dāng)多個(gè)“小任務(wù)”執(zhí)行完成之后,再將這些執(zhí)行結(jié)果合并起來(lái)即可。這種思想值得學(xué)習(xí)。

import java.io.IOException;
import java.util.Arrays;
import java.util.Random;
import java.util.concurrent.RecursiveAction;
import java.util.concurrent.RecursiveTask;

/**
 * 分割 合并 線程池
 * 類似于遞歸的歸并排序,這個(gè)是多線程的遞歸排序
 * jdk1.7之后加的
 */
public class ForkJoinPool {

  static int[] nums = new int[1000000];
  static final int MAX_NUM = 50000;
  static Random random = new Random();

  static {
    for(int i=0; i<nums.length; i++) {
      nums[i] = random.nextInt(100);
    }
    System.out.println("總和1:" + Arrays.stream(nums).sum());
  }

  /**
   * ForkJoinPool里面必須是ForkJoinTask,
   * 直接繼承ForkJoinTask類寫(xiě)起來(lái)比較麻煩,
   * 可以繼承RecursiveAction(無(wú)返回值)和RecursiveTask(遞歸任務(wù),有返回值)
   */
//  static class AddTask extends RecursiveAction {
//
//    int start, end;
//
//    public AddTask(int start, int end) {
//      this.start = start;
//      this.end = end;
//    }
//
//    @Override
//    protected void compute() {
//      if(end-start <= MAX_NUM) {
//        long sum = 0L;
//        for(int i=start; i<end; i++) sum += nums[i];
//        System.out.println("from:" + start + " to:" + end + " =" + sum);
//      }else{
//        int middle = start + (end - start) / 2;
//
//        AddTask subTask1 = new AddTask(start, middle);
//        AddTask subTask2 = new AddTask(middle, end);
//        subTask1.fork();
//        subTask2.fork();
//      }
//    }
//  }

  /**
   * 有返回值
   */
  static class AddTask extends RecursiveTask<Long> {

    int start, end;

    public AddTask(int start, int end) {
      this.start = start;
      this.end = end;
    }

    @Override
    protected Long compute() {
      if(end-start <= MAX_NUM) {
        long sum = 0L;
        for(int i=start; i<end; i++) sum += nums[i];
        System.out.println("from:" + start + " to:" + end + " =" + sum);
        return sum;
      }

      int middle = start + (end - start) / 2;
      AddTask subTask1 = new AddTask(start, middle);
      AddTask subTask2 = new AddTask(middle, end);
      subTask1.fork();
      subTask2.fork();
      return subTask1.join() + subTask2.join();
    }
  }

  public static void main(String[] args) {

    java.util.concurrent.ForkJoinPool pool = new java.util.concurrent.ForkJoinPool();
    AddTask task = new AddTask(0, nums.length);
    pool.execute(task); //精靈線程
    System.out.println("總和2:" + task.join());
    try {
      System.in.read(); //阻塞主線程
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Boot整合QueryDSL的實(shí)現(xiàn)示例

    Spring Boot整合QueryDSL的實(shí)現(xiàn)示例

    這篇文章主要介紹了Spring Boot整合QueryDSL的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • RocketMQ事務(wù)消息使用與原理詳解

    RocketMQ事務(wù)消息使用與原理詳解

    這篇文章主要為大家介紹了RocketMQ事務(wù)消息的實(shí)現(xiàn)原理,在分布式事務(wù)解決方案中,事務(wù)消息也是一個(gè)不錯(cuò)的解決方案,本篇文章將圍繞RocketMQ的事務(wù)消息實(shí)現(xiàn)展開(kāi)描述,需要的朋友可以參考下
    2023-07-07
  • gradle安裝配置以及使用最新方法

    gradle安裝配置以及使用最新方法

    這篇文章主要給大家介紹了關(guān)于gradle安裝配置以及使用的相關(guān)資料,Gradle是一個(gè)基于ApacheAnt和ApacheMaven概念的項(xiàng)目自動(dòng)化構(gòu)建開(kāi)源工具,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • 如何解決HttpServletRequest.getInputStream()多次讀取問(wèn)題

    如何解決HttpServletRequest.getInputStream()多次讀取問(wèn)題

    這篇文章主要介紹了如何解決HttpServletRequest.getInputStream()多次讀取問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Spring?Native打包本地鏡像的操作方法(無(wú)需通過(guò)Graal的maven插件buildtools)

    Spring?Native打包本地鏡像的操作方法(無(wú)需通過(guò)Graal的maven插件buildtools)

    這篇文章主要介紹了Spring?Native打包本地鏡像,無(wú)需通過(guò)Graal的maven插件buildtools,本文探索一下,如果不通過(guò)這個(gè)插件來(lái)生成鏡像,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Java實(shí)現(xiàn)時(shí)間動(dòng)態(tài)顯示方法匯總

    Java實(shí)現(xiàn)時(shí)間動(dòng)態(tài)顯示方法匯總

    這篇文章主要介紹了Java實(shí)現(xiàn)時(shí)間動(dòng)態(tài)顯示方法匯總,很實(shí)用的功能,需要的朋友可以參考下
    2014-08-08
  • Java實(shí)戰(zhàn)之簡(jiǎn)單的文件管理器

    Java實(shí)戰(zhàn)之簡(jiǎn)單的文件管理器

    這篇文章主要介紹了Java實(shí)戰(zhàn)之簡(jiǎn)單的文件管理器,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 探究springboot中的TomcatMetricsBinder

    探究springboot中的TomcatMetricsBinder

    springboot的TomcatMetricsBinder主要是接收ApplicationStartedEvent然后創(chuàng)建TomcatMetrics執(zhí)行bindTo進(jìn)行注冊(cè),TomcatMetrics主要注冊(cè)了globalRequest、servlet、cache、threadPool、session相關(guān)的指標(biāo),本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-11-11
  • 關(guān)于Java整合RocketMQ實(shí)現(xiàn)生產(chǎn)消費(fèi)詳解

    關(guān)于Java整合RocketMQ實(shí)現(xiàn)生產(chǎn)消費(fèi)詳解

    這篇文章主要介紹了關(guān)于Java整合RocketMQ實(shí)現(xiàn)生產(chǎn)消費(fèi)詳解,RocketMQ作為一款純java、分布式、隊(duì)列模型的開(kāi)源消息中間件,支持事務(wù)消息、順序消息、批量消息、定時(shí)消息、消息回溯等,需要的朋友可以參考下
    2023-05-05
  • idea環(huán)境下Maven無(wú)法正常下載pom中配置的包問(wèn)題

    idea環(huán)境下Maven無(wú)法正常下載pom中配置的包問(wèn)題

    這篇文章主要介紹了idea環(huán)境下Maven無(wú)法正常下載pom中配置的包的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06

最新評(píng)論