forkJoin使用

ForkJoin框架使用和原理剖析 ForkJoin使用和原理剖析 相信大家此前或多或少有了解到ForkJoin,ForkJoin框架其实就是一个线程池ExecutorService的实现,通过工作窃取(work-stealing)算法,获取其他线程中未完成的任务来执行。可以充分利用机器的多处理器优势,利用空闲的线程去并行快速完成一个可拆分为小任务的大任务,类似于分治算法。ForkJoin的目标,就是使用所有可用的处理能力来提高程序... 阅读详情

先贴一段可以使用的代码,有时间在研究吧 

可以实现并行计算的

package com.bjsdzk;

import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.Future;
import java.util.concurrent.RecursiveTask;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class ForkJoinTaskExample extends RecursiveTask<Integer> {
	private static Logger logger = LoggerFactory.getLogger(ForkJoinTaskExample.class);

    public static final int threshold = 2;
    private int start;
    private int end;

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

    @Override
    protected Integer compute() {
        int sum = 0;

        //如果任务足够小就计算任务
        boolean canCompute = (end - start) <= threshold;
        if (canCompute) {
            for (int i = start; i <= end; i++) {
                sum += i;
            }
        } else {
            // 如果任务大于阈值,就分裂成两个子任务计算
            int middle = (start + end) / 2;
            ForkJoinTaskExample leftTask = new ForkJoinTaskExample(start, middle);
            ForkJoinTaskExample rightTask = new ForkJoinTaskExample(middle + 1, end);

            // 执行子任务
            invokeAll(leftTask,rightTask);

            // 等待任务执行结束合并其结果
            int leftResult = leftTask.join();
            int rightResult = rightTask.join();

            // 合并子任务
            sum = leftResult + rightResult;
        }
        return sum;
    }

    public static void main(String[] args) {
        ForkJoinPool forkjoinPool = new ForkJoinPool();

        //生成一个计算任务,计算1+2+3+4
        ForkJoinTaskExample task = new ForkJoinTaskExample(1, 100);

        //执行一个任务
        Future<Integer> result = forkjoinPool.submit(task);

        try {
        	logger.info("result:{}", result.get());
        } catch (Exception e) {
        	logger.error("exception", e);
        }
    }
}

 

ForkJoin框架简单使用 场景描述 设想这样一个场景,在一个接口中,需要通过http的方式调用多个外部接口,而且可能存在某几个接口非常耗时的情况,这么一来,对当前接口来说,由于是串行的执行,忽略本地接口的耗时,总的耗时就可以大致估算为调用的多个外部接口响应时间之和,这还是在没有考虑网络延时等其他外部因素作用下 这种场景在业务中随处可见,也是程序员考虑的优化接口响应时间的入手点 解决思路 当存在上述的情况,我们很自然的联想到... 阅读详情

相关推荐

【Java 并发编程】ForkJoin 框架使用代码实例

在文章 JUC并行计算框架 Fork/Join 原理图文详解&代码示例 中,我们详细介绍了 ForkJoin 框架 的原理,这里我们再给出一个代码实例: package i.juc; import java.util.Arrays; import java.util.List; /** * @author: Jack * 2020-06-03 10:20 */ public cl...

AI天才研究院 9400

ForkJoin框架基本使用

ForkJoin框架

webrx的博客 1814

NIST随机性测试实战:从理论公式到结果解读

本文详细解析了NIST随机性测试的实战应用,从基础测试到高级测试,涵盖频数测试、块频数测试、游程测试等核心方法。通过实际案例和参数设置经验,帮助读者理解如何解读测试结果并排查常见问题,提升随机数生成质量。文章还分享了自动化测试流程和硬件RNG特殊处理技巧,适合密码学和区块链开发者参考。

weixin_29323365的博客 315

ForkJoin的使用

ForkJoin解决问题的思路,基本套路用于,基本都是以下为模板,只是修改( 自定义任务的泛型)线程处理后返回类型,以及compute方法。

1925

雷达回波仿真

文章目录前言一、基础理解1.慢时间维度和快时间维度2.脉冲压缩3.MTI4. 脉冲多普勒处理5.cacfar检测二、具体流程1.产生回波信息加入目标时延以及噪声2.解调回波得到基带信号3.脉冲压缩 MTI MTD cafar检测 前言 雷达算法仿真学习,主要流程包括生成目标回波,将基带信号加在载波上其次是加上目标信息和干扰信号后发射,解调回波信号得到基带信号然后MTI,MTD,最后再检测。 一、基础理解 1.慢时间维度和快时间维度 连续M个脉冲回波经过相干解调之后的基带数据形成的一个二维数据矩阵,.

qq_42961235的博客 1万+

雪亮工程视频联网技术详解:视综平台主流接入方式与协议分析

随着雪亮工程建设的深入,视频资源的汇聚与共享成为核心需求。本文简要剖析了雪亮视综平台下的视频联网接入技术,重点讲解了主流接入方式的区别与选型,并深入探讨了平台内部及跨平台的视频资源共享机制(含级联与推送模式),旨在为安防开发人员和系统集成商提供清晰的架构思路与技术参考。

lsz152590的博客 720

Java ForkJoin 简介和应用

Java 并行计算框架 Fork Join 简介和应用 基于分治思想分解任务并处理,工作窃取算法充分利用线程资源

weixin_42176639的博客 2638

Windows下Python多版本共存与切换的终极指南(含环境变量详解)

本文详细解析了在Windows系统下实现Python多版本共存与切换的完整方案。通过深入讲解环境变量Path的底层机制,提供了从安装策略、精细化Path管理到创建快速切换脚本的实战指南,并介绍了py启动器和虚拟环境等高级技巧,帮助开发者彻底解决版本冲突问题,提升开发效率。

v6b7n8m9q0的博客 538

ForkJoin使用

Fork/Join 框架:就是在必要的情况下,将一个大任务,进行 拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个 的小任务运算的结果进行 join 汇总 采用 “工作窃取”模式(work-stealing): 当执行新的任务时它可以将其拆分分成更小的任务执行, 并将小任务加到线程队列中,然后再从一个随机线程的队 列中偷一个并把它放在自己的队列中。相对于一般的线 程池实现,fork/join框架的优势体现在对其中包含的任务的 处理方式上.在一般的线程池中,如果一个线程正在执行的 任务由于某些原

m0_71149992的博客 665

Type-C连接中的CC引脚:Rp与Rd电阻的识别与供电模式选择

本文深入解析Type-C接口中CC引脚的核心功能,包括Rp与Rd电阻的识别原理及供电模式选择机制。通过详细的分压计算和实战案例,揭示Type-C设备如何通过CC引脚实现方向检测、角色识别和供电协商,为硬件设计提供关键指导。

weixin_30616969的博客 342

基于STM32的智能鞋柜系统设计与实现

摘要:本文设计并实现了一种基于STM32F103C8T6单片机的智能鞋柜系统。该系统通过DHT11温湿度传感器、PM2.5粉尘传感器和MQ-135空气质量传感器构建多维度环境监测网络,结合光电红外传感器和光敏传感器实现柜门状态识别与智能照明。系统采用分层控制策略,当温度低于15℃或湿度高于65%时自动启动加热和通风,PM2.5超标时启动通风,污染物浓度升高时激活紫外线杀菌。创新性地实现了柜门状态与紫外线消毒的双保险互锁机制,确保使用安全。测试结果表明,系统温湿度控制精度达±0.4℃/±2.0%RH,PM2.

3254968421的博客 253

ForkJoin使用,模拟数据库查询操作List

ForkJoin使用,模拟数据库查询操作 手上的工作需要实现从数据库中查询大量的数据,然后将数据整合进行分页,于是了解使用ForkJoin框架,进行优化 ForkJoin框架 从JDK1.7开始,Java提供Fork/Join框架用于并行执行任务,它的思想就是讲一个大任务分割成若干小任务,最终汇总每个小任务的结果得到这个大任务的结果。 这种思想和MapReduce很像(input --> split --> map --> reduce --> output) 主要有两步: 第一、任

yangwen-bo的博客 2933

2、OTA/gm - C滤波器的架构与设计

本文深入探讨了OTA/gm-C滤波器的两种主要设计方法:基于LC梯形网络的设计与多环反馈(MLF)结构。前者包括元件替代法和信号模拟法,分别通过电感替代或电路方程模拟实现低敏感度滤波器;后者通过积分器级联与反馈网络合成全极点或含任意传输零点的传递函数。文中详细分析了不同结构如IFLF和LF的反馈矩阵、传递函数及性能差异,指出LF结构在敏感度、噪声和整体性能上的优势。同时比较了各类方法的优缺点及适用场景,为高频连续时间集成电路滤波器的设计提供了系统性指导。

fanta的博客 137

在angular中使用forkjoin

forkjoin的使用 为什么要使用forjoin? 个人理解:有的时候我们需要多个接口返回值之后才能加载数据渲染页面,此时可以使用forkjoin component.ts import { forkJoin } from 'rxjs'; forkJoin( this._apiService.getIndexCode('PatientTotal'), this._apiService.getI...

qq_36487294的博客 2879

YOLOv11改进策略【模型轻量化】| 替换骨干网络为 GhostNet V1 基于 Ghost Module 和 Ghost Bottlenecks的轻量化网络结构

本文记录的是基于的YOLOv11网络模型轻量化方法研究。GhostNet中的Ghost模块和Ghost瓶颈结构是其轻量化的关键。Ghost模块克服了传统卷积层计算资源需求大的问题,Ghost瓶颈则合理设计了通道数量的变化以及与捷径连接的方式,能更好地在减少计算成本的同时保持较高性能,从而提升模型在移动设备上的应用能力和效率。

Limiiiing的博客 1430

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ForkJoin的使用案例

  使用ForkJoin计算1-100的和: public class ForkJoinTaskExample extends RecursiveTask&lt;Integer&gt; { public static final int threshold = 2; private int start; private int end; public Fo...

dwhhome的博客 906

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

关于Java ForkJoin框架的使用demo

package com.com.test; import java.util.concurrent.ForkJoinTask; import java.util.concurrent.RecursiveTask; import java.util.stream.LongStream; /** * TODO: 类描述 * * @author minghui */ public class...

m200674067的博客 441

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ForkJoin框架从入门到使用

因为本章很多是笔者参考自中文版API,先附上链接 https://ifeve.com/tag/forkjoin/ ForkJoin: 体现了分而治之的思想,大于既定大小,分为很多子任务,小于既定大小,直接调用任务解决 (自己判断情形),子任务是相对独立的,与原问题形式相同,将子问题的解合并得到原问题的解(有点类似mapReduce) fork操作:当你把任务分成更小的任务和使用这个框架执行它们。...

qq_41700030的博客 224

Java里面ForkJoin框架和使用示例

ForkJoin 框架是 Java 7 引入的一个并行计算框架,主要用于将一个大任务拆分成多个小任务并行执行,最后将结果合并。它基于。

xuweilin的博客 575

并发编程之ForkJoin使用及原理

以forkJoin的一个使用情景开始吧 public class ForkJoinQuery extends RecursiveTask<Boolean> { private static final int THREAD_HOLD = 5000; private long start; private long end;//需要查询的所有数据的数量 private...

CoffeeAndMilk123的博客 564

ForkJoin从原理设计到使用图解

从JDK1.7开始,Java提供ForkJoin框架用于并行执行任务,它的思想就是讲一个大任务分割成若干小任务,最终汇总每个小任务的结果得到这个大任务的结果。

meser88的博客 383

Angular 中 如何使用RxJS库中的forkJoin?

请注意,如果其中一个 Observable 发生错误,forkJoin 操作符会立即将错误传递给订阅者,并不会等待其他 Observable 完成。当所有 Observable 都完成时,forkJoin 才会发出一个值,这个值是一个数组,包含了所有 Observable 的最后一个发出的值。在 Angular 中,forkJoin 是 RxJS 库中的一个操作符,可以将多个 Observable 组合成一个 Observable,等到所有的 Observable 都完成时,才会发出一个值并结束。

金木AI 729

java中ForkJoin框架的使用

什么是Fork\Join框架 从JDK1.7开始,Java提供Fork/Join框架用于并行执行任务。它的思想就是讲一个大任务分割成若干小任务,最终汇总每个小任务的结果得到这个大任务的结果。如下图: 如何实现Fork\Join java 的ForkJoinTask 抽象类中提供compute方法给我们实现这种思想。java又提供两个抽象类继承ForkJoinTask ,分别是:RecursiveTask有返回值,RecursiveAction无返回值。 java7代码实例 1、定义一个实体类 packag

zhangjian8641的博客 343
上一篇: 面试被问过的问题
下一篇: post 兼容application/x-www-form-urlencoded;charset=UTF-8 和json
三笠爷
博客等级 码龄9年 18粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值