forkjoin使用_forkjoin与线程池区别

forkjoin使用_forkjoin与线程池区别ForkJoinPoolinfoForkJoinPool=newForkJoinPool(Runtime.getRuntime().availableProcessors()*2);ForkJoinTask<Map<Long,InfoVO>>forkJoinTask=ThreadPoolManage.infoForkJoinPool.submit(newPriceTask(skuIds,0,skuIds.size(),infoSoaService));

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺



ForkJoinPool infoForkJoinPool = new ForkJoinPool(Runtime.getRuntime().availableProcessors() * 2);

ForkJoinTask<Map<Long,InfoVO>> forkJoinTask = ThreadPoolManage.infoForkJoinPool.submit(new PriceTask(skuIds, 0, skuIds.size(),infoSoaService));

Map<Long,InfoVO> infoVOMap = forkJoinTask.join();


 /** * 多任务查询 */
    public class PriceTask extends RecursiveTask<Map<Long,InfoVO>> { 
   
        /** * sku集合 */
        private Set<Long> skuIds;
        /** * */
        private InfoSoaService infoSoaService;
        /** * 开始 */
        private int start;
        /** * 最大 */
        private int end;
        /** * 单次最多查询sku数量 */
        static final int THRESHOLD = 20;

        public PriceTask(Set<Long> skuIds, int start, int end,InfoSoaService infoSoaService) { 
   
            this.skuIds = skuIds;
            this.start = start;
            this.end = end;
            thisinfoSoaService = infoSoaService;
        }

        @Override
        protected Map<Long, InfoVO> compute() { 
   
            if (end - start <= THRESHOLD) { 
   
                List<Long> skuList = new ArrayList<>(skuIds);
                Response<Map<Long, InfoVO>> bySkuIds = infoSoaService.getInfoBySkuIds(buildCaller(), new HashSet<>(skuList.subList(start, end)));
                return new HashMap<>(bySkuIds.getData());
            }
            int middle = (end + start) / 2;
            PriceTask left = new PriceTask(skuIds, start, middle, infoSoaService);
            PriceTask right = new PriceTask(skuIds, middle, end, infoSoaService);
            invokeAll(left, right);
            Map<Long,InfoVO> resultMap = new HashMap<>();
            Map<Long, InfoVO> infoVOLeftMap = left.join();
            Map<Long, InfoVO> infoVORightMap = right.join();
            resultMap.putAll(infoVOLeftMap);
            resultMap.putAll(infoVORightMap);
            return resultMap;
        }
    }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/191302.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • matlab 加权回归估计_Matlab:地理加权回归基本操作「建议收藏」

    matlab 加权回归估计_Matlab:地理加权回归基本操作「建议收藏」%————————————————————————–%计量经济学服务中心《空间计量经济学及Matlab应用》%————————————————————————–Vname=VariableGeometri…

  • 线程池面试题一般会怎么问?线程池面试题总结及答案整理

    线程池面试题一般会怎么问?线程池面试题总结及答案整理对于广大程序员来说,线程池一定不会陌生,因为大部分程序员面试时总会被问到关于线程池的问题,今天总结了一些关于线程池的各种面试可能问到的题目,希望对大家有所帮助。一、线程池是什么?答:线程池,是一种多线程处理形式,在处理过程中将任务添加到队列中,然后在创建线程后自动启动这些任务。比如把线程池看成一个容器,集中管理线程。线程使用完不会销毁,会先储存在线程池中。二、线程池有几种?答:常见的线程池有四种。newCachedThreadPool创建一个可缓存的线程池,如果线程池长度超过处理需要,

  • 主机号「建议收藏」

    主机号「建议收藏」用于识别该网络中的主机。IP地址分为五类,A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数目不同。A、B、C三类IP地址的特征:

  • 细说java_java barrier

    细说java_java barrier今天来说说cloneable,java中创建对象除了使用new关键字,反射,还有一种方式就是clone。有一个设计模式叫原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,简单的说就是clone一个对象实例,使得clone出来的对象和原有的对象一模一样,两个对象相互不影响。什么时候使用clone呢,clone又存在哪些问题?  1.clone的使用场景…

    2022年10月14日
  • 不要再叫他们「爸爸」了,一声「孙子」送给天下甲方!

    哈喽狗子们好 最近网上有个哥们吐槽甲方火了! 他说甲方其实不是「爸爸」 而是「孙子」…… 乍一听甲方可能就不满意了 但你仔细一想就会点头同意了 因为真的有理…

  • layui 单选框、多选框radio 元素判断是必填项 lay-verify=‘required‘

    layui 单选框、多选框radio 元素判断是必填项 lay-verify=‘required‘简单验证复选框,单选框必填例子代码:<!DOCTYPEhtml><html><head><metacharset=”utf-8″><title>layui</title><metaname=”renderer”content=”webkit”><metaht…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号