<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      JUC并發編程學習(十三)ForkJoin

      ForkJoin

      什么是ForkJoin

      ForkJoin在JDK1.7,并發執行任務!大數據量時提高效率。

      大數據:Map Reduce(把大任務拆分成小任務)

      ForkJoin特點:工作竊取

      為什么可以取竊取其他線程的任務呢?因為這里面維護的都是雙端隊列(即隊列的兩端都可以取元素)

      ForkJoin操作

      在java.util.concurrent下的接口摘要中,有以下兩個接口

      點進其中一個找到具體的類,可以看到ForkJoinPool

      這是具體的執行類,就像ThreadPoolExecutor

      具體的執行通過ForkJoinTask類來執行

      使用ForkJoin

      1、需要一個ForkJoinPool,通過execute方法來執行,參數為ForkJoinTask

      2、計算任務 forkJoinPool.execute(ForkJoinTask<?> task)

      3、定義一個ForkJoinTask

      如何去定義一個ForkJoinTask,打開jdk文檔,找到ForkJoinTask類,查看具體的子類。

      其中遞歸事件沒有返回值,而任務肯定要有結果,所以遞歸任務是有返回值的

      點進任務,查看示例

      代碼示例:

      package org.example.forkjoin;
      /*
      * 求和計算的任務
      *
      *
      * 程序員的三六九等
      * 三(普通求和)、六(ForkJoin)、九(Stream并行流)
      *
      *
      * 使用ForkJoin:
      * 1、ForkJoinPoll 通過他來執行
      * 2、計算任務 forkJoinPool.execute(ForkJoinTask<?> task)
      * 3、定義一個ForkJoinTask
      *
      *
      * */
      import java.util.concurrent.RecursiveTask;
      
      public class ForkJoinDemo extends RecursiveTask<Long> {
          private Long start;
          private Long end;
          //臨界值
          private Long temp = 10000L;
      
          public ForkJoinDemo(Long start, Long end) {
              this.start = start;
              this.end = end;
          }
      
      
          //計算方法
          @Override
          protected Long compute() {
              if ((end-start)<temp){
                  Long sum = 0L;
                  for (Long i = start; i <= end; i++) {
                      sum+=i;
                  }
                  return sum;
              }else {
                  //使用ForkJoin分支合并計算
                  Long middle = (end + start) / 2;//中間值
                  ForkJoinDemo task1 = new ForkJoinDemo(start,middle);
                  //拆分任務、把任務壓入線程隊列
                  task1.fork();
                  ForkJoinDemo task2 = new ForkJoinDemo(middle+1,end);
                  task2.fork();
      
                  return task1.join()+task2.join();
              }
          }
      }
      

      三六九等程序員的測試

      package org.example.forkjoin;
      
      import java.util.concurrent.ExecutionException;
      import java.util.concurrent.ForkJoinPool;
      import java.util.concurrent.ForkJoinTask;
      import java.util.stream.LongStream;
      
      public class Test {
          public static void main(String[] args) throws ExecutionException, InterruptedException {
      //        test01();//11720
      //        test02();//7369
              test03();//239
          }
          /*
          * 普通程序員
          * */
          public static void test01() {
              long startTime = System.currentTimeMillis();
              Long sum = 0L;
              for (Long i = 1L; i <= 10_0000_0000L; i++) {
                  sum+=i;
              }
              long endTime = System.currentTimeMillis();
              System.out.println("結果:" + sum + "-->耗時:" + (endTime - startTime));
          }
      /*
      * 會使用ForkJoin
      * */
          public static void test02() throws ExecutionException, InterruptedException {
              long startTime = System.currentTimeMillis();
              ForkJoinDemo forkJoinDemo = new ForkJoinDemo(0L,10_0000_0000L);
              ForkJoinPool forkJoinPool = new ForkJoinPool();
      //        forkJoinPool.execute(forkJoinDemo);//執行
              ForkJoinTask<Long> submit = forkJoinPool.submit(forkJoinDemo);
              Long aLong = submit.get();
              long endTime = System.currentTimeMillis();
      
              System.out.println("結果:" + aLong + "-->耗時:" + (endTime - startTime));
          }
          /*
          * 九等程序員:Stream流并行運算
          * 效率高十幾倍
          *
          * */
          public static void test03() {
              long start = System.currentTimeMillis();
      
              Long sum = LongStream.rangeClosed(0L, 10_0000_0000L).parallel().reduce(0, Long::sum);
      
              long end = System.currentTimeMillis();
              System.out.println("結果:" + sum + "-->耗時:" + (end - start));
          }
      }
      
      posted @ 2023-11-06 12:59  高同學,你好  閱讀(190)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 97精品人妻系列无码人妻| 国产欧美日韩在线在线播放| 国产成人一区二区三区视频免费| 亚洲熟女乱色综合亚洲图片| 制服丝袜美腿一区二区| 精品无码一区二区三区在线| 国产日韩入口一区二区| 2019久久久高清日本道| 长沙市| 在线看免费无码av天堂的| 少妇高潮喷水正在播放| 屏东市| 亚洲中文字幕在线无码一区二区| 精品国产美女福到在线不卡| 国产不卡一区二区四区| 久久国产乱子精品免费女| 99热精品毛片全部国产无缓冲| 饶阳县| 亚洲国产成人久久77| 中文字幕亚洲日韩无线码| 图片| 99精品国产成人一区二区| 国产精品久久久久久久专区| 欧美福利电影A在线播放| 国产伦精品一区二区三区| 狠狠躁夜夜躁无码中文字幕 | 久久人妻无码一区二区三区av| 国产老熟女国语免费视频| 91人妻无码成人精品一区91| 中国国产免费毛卡片| 中文字幕亚洲国产精品| www国产无套内射com| 强奷漂亮雪白丰满少妇av| 久久超碰色中文字幕超清| 色猫咪av在线网址| 亚洲综合伊人久久大杳蕉| 91亚洲人成手机在线观看| 国产精品久久中文字幕| 日韩一区二区三区女优丝袜| 深夜福利啪啪片| 天堂网av一区二区三区|