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


相关推荐

  • 如何在CentOS上配置虚拟IP地址 (VIP)

    如何在CentOS上配置虚拟IP地址 (VIP)目录介绍教程第1步第2步第3步第4步第5步本教程将指导您如何在服务器上配置虚拟IP地址。介绍顾名思义,虚拟IP地址(VIP)是一个没有实际物理网络接口的IP地址。传入的数据包被发送到VIP,但所有数据包都通过真实的网络接口传输。虚拟IP地址通常用于数据库高可用性。应用程序将其用于数据库连接,而不是普通的主机IP地址。当活动数据库失败时,VIP将转移到新升…

    2022年10月20日
    0
  • sqlmap命令详解_sql命令大全

    sqlmap命令详解_sql命令大全SQLMAP命令详解 Options(选项):–version显示程序的版本号并退出-h,–help显示此帮助消息并退出-vVERBOSE详细级别:0-6(默认为1)Target(目标):以下至少需要设置其中一个选项,设置目标URL。-dDIRECT直接连接到数据库。-uURL,–url=URL目标URL。-lLIST…

    2025年5月23日
    0
  • Android HandlerThread分析[通俗易懂]

    之前Handler分析的文章有分析过,子线程Thread中是不能直接使用Handler的,需要调用Looper.prepare()方法,因此Android就为我们提供了Handler和Thread结合的方法HandlerThread方法,我们先来看下HandlerThread的源码:publicclassHandlerThreadextendsThread{intmP…

    2022年4月16日
    39
  • IDEA搭建Android开发环境[通俗易懂]

    IDEA搭建Android开发环境[通俗易懂]开发环境IDEA2019.3+SDK+JDK1.8。关于JDK的安装参考:JDK安装以及环境变量的配置,这里就不再说了。直接从SDK的安装开始。一、SDK的下载官方下载地址:sdk下载。不过服务器可能进不去。因为不用AndroidStudio,所以拉到最下面,选择sdk-tools就行下载完成后,解压到一个目录下即可。二、IDEA配置SDK打开Configure->Str…

    2022年7月23日
    230
  • span或者input的disabled(小技巧)

    span或者input的disabled(小技巧)

    2021年8月1日
    60
  • 使用lrzsz上传ssh客户端公钥[通俗易懂]

    使用lrzsz上传ssh客户端公钥[通俗易懂]lrzsz是一种Linux服务器和window互传文件小工具。lrzsz只适合传输小文件,不适合传输大型文件。一般用来传公钥文件。安装Ubuntusudoapt-getinstalllrzszCentOSyuminstalllrzsz使用说明与ssh客户端有关的两个命令可以提供很方便的操作:sz:将选定的文件发送(send)到本地机器szafile…

    2022年6月23日
    26

发表回复

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

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