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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue文件下载功能_vue实现下载功能

    vue文件下载功能_vue实现下载功能vue下载文件常用的几种方式一、直接打开直接打开是指我们直接使用window.open(URL)的方法优点:简单操作缺点:没办法携带token二、我们可以自己封装一个方法,比如如下:importaxiosfrom”axios”import*asauthfrom’@/utils/auth.js’letajax=axios.create({baseURL:process.env.VUE_APP_BASE_API,timeout:100000}

    2025年8月2日
    5
  • PhpStorm-2021.3.2 激活码破解方法

    PhpStorm-2021.3.2 激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    90
  • 指针

    指针

    2022年1月12日
    51
  • 我看撸啊撸

    我看撸啊撸题图:byfrombilojackson360行,行行出状元。我相信今天大家的朋友圈应该被IG刷屏了。ig牛逼。可能有的人还一脸懵逼,不知道到底发生了什么。就…

    2022年8月22日
    5
  • windows驱动开发教程_windows内核驱动开发

    windows驱动开发教程_windows内核驱动开发1.前言因工作上项目的需要,笔者需要做驱动相关的开发,之前并没有接触过相关的知识,折腾一段时间下来,功能如需实现了,也积累了一些经验和看法,所以在此做番总结。对于驱动开发的开发指引,微软官方文档网站已经提供了很详细的教程文档,并且在Github上提供了一系列典型的例程源码用于开发人员参考。开发人员在具备一定的驱动概念知识后,通过参考官方例程可以很容易实现拥有特定功能的驱动应用程序。Windows驱动程序入门:Windows驱动程序入门-Windowsdrivers|Micros..

    2022年8月30日
    3
  • linux安装svn服务器的两种方式(转载)「建议收藏」

    linux安装svn服务器的两种方式(转载)「建议收藏」操作环境:CentOS7.264位第一种:采用压缩包安装:比如你们公司服务器上安装软件有自己的规定,一般会采用压缩包安装。第一步:SVN服务器端压缩包下载下载地址:http://mirrors.cnnic.cn/apache/subversion/我下载的是subversion-1.8.19版本,下载好的压缩包置于目录/usr/local/java/svn下(根据大家实际需要自行选择存放目录)。第二步:解压,进入解压后的文件在/usr/local/java/svn目录下执行下面两个命令:

    2022年10月17日
    2

发表回复

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

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