ForkJoin

news2024/11/25 20:49:27

什么是ForkJoin

        ForkJoin在JDK1.7,并行执行任务!提高效率,大数据量!

        大数据:Map Reduce(把大任务拆分为小任务)

 

ForkJoin特点:工作窃取

        这个里面维护的都是双端队列

 

        当第一行的任务执行完后,会去第二行窃取未执行的任务

        缺点:可能会竞争同一个任务

ForkJoin操作

        ForkJoinPool的方法

 

例:

import java.util.concurrent.RecursiveTask;

/**
 *  计算求和任务
 *  如何使用ForkJoin
 *  1.通过ForkJoinPool通过它来执行
 *  2.计算任务:ForkJoinPool.execute(ForkJoinTask<?> task)
 *  3. 计算类要继承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 midden = (start + end) / 2;
            ForkJoinDemo task1 = new ForkJoinDemo(start, midden);
            //拆分任务,把任务压入线程队列
            task1.fork();
            ForkJoinDemo task2 = new ForkJoinDemo(midden + 1, end);
            //拆分任务,把任务压入线程队列
            task2.fork();

            return task1.join() + task2.join();
        }
    }
}


    //基础递归方法
//public class ForkJoinDemo {
//    public static void main(String[] args) {
//        long sum = 0;
//        for (long i = 1; i <= 10_0000_0000; i++) {
//            sum += i;
//        }
//        System.out.println(sum);
//    }
//}

        测试:

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 {
//        test1();    
//        test2();    
//        test3();    
    }

    public static void test1() {
        Long sum = 0L;
        long start = System.currentTimeMillis();
        for (Long i = 1L; i <= 10_0000_0000; i++) {
            sum += i;
        }
        long end = System.currentTimeMillis();
        System.out.println("总和:" + sum + " 时间:" + (end - start));
    }

    public static void test2() throws ExecutionException, InterruptedException {
        long start = System.currentTimeMillis();

        ForkJoinPool forkJoinPool = new ForkJoinPool();
        ForkJoinTask<Long>   forkJoinTask = new ForkJoinDemo(0L, 10_0000_0000L);
        //提交任务
        ForkJoinTask<Long> submit = forkJoinPool.submit(forkJoinTask);

        Long sum = submit.get();

        long end = System.currentTimeMillis();
        System.out.println("总和:" + sum + " 时间:" + (end - start));
    }

    public static void test3(){
        long start = System.currentTimeMillis();

        //Stream并行流 range -> ()   rangeClosed -> (]

        long sum = LongStream.rangeClosed(0L, 10_0000_0000L).parallel().reduce(0,Long::sum);

        long end = System.currentTimeMillis();
        System.out.println("总和:" + sum + " 时间:" + (end - start));
    }
}

  运行结果

        test1:

 

        test2:

 

        test3:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/154119.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AJAX

目录1 AJAX 快速入门1.1 介绍1.2 原生 JavaScript 实现 AJAX1.3 原生JS实现AJAX详解1.4 jQuery 的 GET 方式实现 AJAX1.5 jQuery 的 POST方式实现 AJAX1.5 jQuery 的 通用方式实现 AJAX2 JSON 的处理2.1 JSON 回顾2.2 JSON 转换工具的介绍2.3 JSON转换练习3 案例-搜索联想4 案例…

git 切换分支

1. 查看远程分支&#xff0c;查看当前所有git branch -a 2. 查看本地分支git branch * master3. 切换分支 //创建分支 git checkout -b test origin/test //切换分支 git checkout 分支名

iframe 页面间的通信(分享)

文章目录1. 概述2. 页面之间传递数据3. 直接获取父页面的数据4. 获取父级页面源的信息1. 概述 在许多老的项目中使用的都是 iframe 进行的页面嵌套&#xff0c;我这里写了三个页面进行演示红色的页面为最外层&#xff0c;本地开的服务&#xff0c;端口为 5500&#xff0c;而黄色…

官宣了,德云社京剧神童陶阳亮相河南春晚,为什么不是老乡岳云鹏

随着春节的临近&#xff0c;一年一度的央视春晚&#xff0c;也即将拉开大幕与观众见面&#xff0c;不过今年却略有不同。虽然央视春晚还没有开播&#xff0c;互联网上面就一片抵触声音&#xff0c;有人甚至给出了建议&#xff0c;希望省下钱给大家发红包。 与央视春晚形成鲜明对…

未来的分析型数据库是什么样的?

本文来自于 Doris Summit 2022 演讲实录&#xff0c;演讲人&#xff1a;陈明雨十年对于数据库意味着什么&#xff1f;身处在日新月异的时代&#xff0c;我们见惯了技术的兴起与繁荣、变迁与衰落&#xff0c;甚至是朝荣夕灭。信息技术以前所未有的速度更迭&#xff0c;给周遭事物…

从0到1完成一个Vue后台管理项目(十四、对话框封装、接口联通、api优化 很重点(封装思想))

往期 从0到1完成一个Vue后台管理项目&#xff08;一、创建项目&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;二、使用element-ui&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;三、使用SCSS/LESS&#xff0c;安装图标库&#xff09; 从0到1完成一个Vu…

React Fiber 树思想,解决业务实际场景

熟悉 Fiber 树结构 我们知道&#xff0c;React 从 V16 版本开始采用 Fiber 树架构来实现渲染和更新机制。 Fiber 在 React 源码中可以看作是一个任务执行单元&#xff0c;每个 React Element 都会有一个与之对应的 Fiber 节点。 Fiber 节点的核心数据结构如下&#xff1a; …

基于javaweb+springboot+HTML汽车配件管理系统设计和实现以及文档报告

基于javaweb(springboot)汽车配件管理系统设计和实现以及文档报告 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言…

Java面试题,这是一篇会一直更新的博客!欢迎大家留言~

Java面试题1、面向对象与面向过程2、Spring源码分析&#xff08;可能比较复杂&#xff0c;但是看下去可能会找到让你顿悟的字眼&#xff09;2.1、Spring创建Bean对象2.2 实例化&#xff08;推断构造方法&#xff09;1、面向对象与面向过程 封装&#xff1a;封装在于明确标识出允…

快递驿站取件管理系统|基于SpringBoot的快递栈系统设计与实现

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

商场楼层地图怎么制作,高效、便捷的商场二三维地图绘制平台

当顾客走进庞大的商场购物中心&#xff0c;如何让顾客在商场购物消费时有更轻松方便的体验&#xff1f;如何能快速将品牌和商品传递给潜在顾客&#xff0c;并一键引导顾客到店&#xff1f;电子地图作为大家最喜闻乐见的高效应用形式&#xff0c;在商业应用中&#xff0c;不论针…

arduinoIDE下载keypad和password库文件

任务需求&#xff1a;需要使用4*4矩阵键盘来完成一个按键密码锁 需要使用keypad和password这两个开源库 开源库的查找 1.在IDE中直接查找 同时在更多中能够看到api文档 2.在官网中进行找寻 至于导入的方式比较简单就不做叙述 keypad库文件文档api分析 api可以在官网中有…

用Python找出了删除自己微信的所有人并将他们自动化删除了

用Python找出了删除自己微信的所有人并将他们自动化删除了 你是否有微信被删了好友不自知&#xff0c;还傻傻的给对方发消息&#xff0c;结果出现了下图中那尴尬的一幕的经历呢&#xff1f;其实我们可以用Python提前把他们找出来并自动化删除避免尴尬的。 为了避免再次出现上…

Tools for better thinking

内容来自untools官网&#xff0c;感兴趣的可以去翻译一下&#xff0c;我只做下总结 理解系统 Concept mapConnection circlesIceberg ModelBalancing feedback loopReinforcing feedback loop 做出决策 Cynefin frameworkSix Thinking HatsSecond-order thinkingEisenhower Mat…

【LeetCode】753. 破解保险箱

753. 破解保险箱 题目描述 有一个需要密码才能打开的保险箱。密码是 n 位数, 密码的每一位是 k 位序列 0, 1, ..., k-1 中的一个 。 你可以随意输入密码&#xff0c;保险箱会自动记住最后 n 位输入&#xff0c;如果匹配&#xff0c;则能够打开保险箱。 举个例子&#xff0c…

怎么看电脑配置?Windows和Mac系统配置的查看方法

电脑的配置一般指电脑硬件配件的高档程度和性价比&#xff0c;计算机的性能主要取决于主要的硬件配置。很多朋友在购买电脑之前应该注意查看电脑的配置&#xff0c;怎么看电脑配置&#xff1f;下面有关于Windows系统和Mac系统电脑配置的不同查看方式&#xff0c;一起来看看吧&a…

光遗传学应用中所涉及到的光纤产品盘点!

如上图所示&#xff0c;在光遗传学的应用中&#xff0c;会使用到如光遗传跳线、光遗传插芯针、光纤旋转器、光纤耦合器/分束器&#xff08;12或22&#xff09;等产品。对于这些产品&#xff0c;根据不同的应用&#xff0c;又涉及到光纤芯径、数值孔径NA、出纤长度、插芯直径等众…

如何拖拽图片放到指定的格子里

本文首发于微信公众号&#xff1a; 小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料&#xff0c;每天学点儿游戏开发知识。嗨&#xff01;大家好&#xff0c;我是小蚂蚁。今天来分享一个如何在游戏中拖拽一个图片&#xff0c;然后把它放到指定的格子里&#xff0c…

网络编程(十)——基于UDP协议的套接字

TCP和UDP协议传输对比 TCP协议传输数据可靠&#xff0c;TCP传输数据后&#xff0c;如果收到接收方回应消息&#xff0c;则会在本机缓存中删除已发送消息&#xff1b;如果没有收到接收方回应消息&#xff0c;则会利用缓存继续发送消息。UDP协议传输数据相对来说不可靠&#xff…

学生看书用白炽灯和led灯哪个好?学生led护眼灯排行榜

我们都知道学生的晶状体是比较敏感的&#xff0c;不得不承认一个实际问题&#xff0c;LED灯已经普遍到日常生活中&#xff0c;不管是教室、企业、书房&#xff0c;使用LED灯居多&#xff0c;主要是因为它的电流稳定、光线柔和、光效效率高&#xff0c;所以LED灯的灯光没有紫外线…