forkjoinpool 弊端_oracle数据库分页查询sql

forkjoinpool 弊端_oracle数据库分页查询sql使用forkjoin框架分页查询所有数据的例子importio.swagger.annotations.ApiOperation;importlombok.AllArgsConstructor;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.annotation.PropertySou

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

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

使用forkjoin框架分页查询所有数据的例子

import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;

@RestController
@RequestMapping("/test2")
@PropertySource("classpath:/application.properties")
@Slf4j
public class ForkJoinPollController { 
   

    @Autowired
    private SyncPersonInfoServiceImp syncPersonInfoService;

    @ApiOperation("测试forkJoinPoll")
    @GetMapping("/forkJoinPoll")
    public void forkJoinPoll(){ 
   
        log.info("forkJoinPoll start...");
        ForkJoinPool pool = new ForkJoinPool(Runtime.getRuntime().availableProcessors() * 2);
        // 总页数,提前查询出来,数据量不大就不用拆任务
        int total = syncPersonInfoService.getTotal();
        int totalPage = (int)Math.ceil(total * 1.0 / IrdsConstant.PAGE_SIZE_MAX);
        SumTask innerFind = new SumTask(1, totalPage);
        pool.invoke(innerFind);
        List<VChrHkws> join = innerFind.join();
        pool.shutdown();
        log.info("forkJoinPoll end,size={}",join.size());
    }


    @AllArgsConstructor
    public class SumTask extends RecursiveTask<List<VChrHkws>> { 
   

        private final Integer fromIndex;
        private final Integer toIndex;

        @Override
        protected List<VChrHkws> compute() { 
   
            // 如果任务足够小就触发任务
            if (toIndex - fromIndex < 2) { 
   
                List<VChrHkws> list = new ArrayList<>();
                for (int pageNo = fromIndex; pageNo <= toIndex; pageNo++) { 
   
                    ApiPageListData<VChrHkws> pageData = syncPersonInfoService.getPageListData(pageNo, IrdsConstant.PAGE_SIZE_MAX);
                    // 查询数据库返回值
                    list.addAll(pageData.getList());
                }
                return list;
            } else { 
   
                // 如果任务大于阈值,就分裂成两个子任务计算
                int mid = (fromIndex + toIndex) / 2;
                SumTask left = new SumTask(fromIndex, mid);
                SumTask right = new SumTask(mid + 1, toIndex);
                invokeAll(left, right);
                List<VChrHkws> join = left.join();
                join.addAll(right.join());
                return join;
            }
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193232.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 10 种机器学习算法的要点(附 Python 和 R 代码)「建议收藏」

    10 种机器学习算法的要点(附 Python 和 R 代码)「建议收藏」前言谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和机器人受到了许多媒体关注,但是这家公司真正的未来在于机器学习,一种让计算机更聪明、更个性化的技术。也许我们生活在人类历史上最关键的时期:从使用大

    2022年7月6日
    24
  • lamda运算学习笔记

    lamda运算学习笔记lamda->Llamda演算至少从表面上看,有着这样一种企图:将所有运算操作,以及自然数都抽象成“函数”(再一次见识到函数这个概念的伟大)。下面简单的介绍下lamda演算。lamda演算的原始定义看起来比较无聊:(Lx.[fx])a=fa上式用熟悉的概念翻译,就是自变量为x的函数f(x),代入x=a,得f(a)但是这里有

    2022年5月30日
    32
  • Ubuntu20.04下安装QQ[通俗易懂]

    https://blog.csdn.net/dulingwen/article/details/89848661https://blog.csdn.net/qq_36428171/article/details/81209475https://github.com/wszqkzqk/deepin-wine-ubuntuhttps://www.lulinux.com/archives/1319…

    2022年4月16日
    132
  • 建立内网Windows补丁服务器「建议收藏」

    建立内网Windows补丁服务器建立内网Windows补丁服务器实施方案一、完成内网WSUS服务器的架设。二、对客户端计算机进行设置。三、进行外网WSUS服务器的架设。建立内网Windows补丁服务器众所周知,Windows系统有着种种安全漏洞和不足,这些都要依靠微软发布的一个个补丁来弥补,但公司内网无法访问Internet,,不能及时地下载更新。补丁的分发是微软应尽的责任,所以他们开发了WindowsServerUpdateServices(简称WSUS)这一软件,可以实现通过一台服务器下载更新

    2022年4月16日
    51
  • Python学习系列之lambda表达式

    Python学习系列之lambda表达式一、lambda定义与用法lambda表达式是一行的函数。它们在其他语言中也被称为匿名函数。即,函数没有具体的名称,而用def创建的方法是有名称的。如果你不想在程序中对一个函数使用两次,你也许会想用lambda表达式,它们和普通的函数完全一样。而且当使用函数作为参数的时候,lambda表达式非常有用,可以让代码简单,简洁。lambda表达式返回的是function类型,说明是一个函数类型。…

    2022年10月18日
    1
  • 多少行代码可以申请软件著作权_python申请软件著作权

    多少行代码可以申请软件著作权_python申请软件著作权在申请软件专利或著作权时,如何快速统计源码行数。其实我们可以利用vs2010的文件搜索功能结合正则表达式,来遍历所有文件得出总行数.

    2022年9月22日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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