当前位置: 首页 > news >正文

Java基础|多线程:多线程分页拉取

前言:

通常我们都会遇到分页拉取的需求,比如与第三方系统同步数据,定时拉取全量数据做缓存,下面我们简单介绍下多线程分页写法

需求:
全量同步第三方系统数据,并在全部数据同步完后,统一做缓存数据处理

前置条件:
1.使用springBoot的ThreadPoolTaskExecutor 多线程封装数据
2.springBoot2.x、jdk8

完成步骤:
1.计算对应页数,把每页需求
2.循环多线程拉取
3.多线程内的子线程都完成了之后,再统一做缓存

具体代码:
1.多线程+CountDownLatch

public void doRepetition() {log.info("处理重复组合编码 start");doneService.initRingCode();List<DoneRingPO> doneRingList = doneRingMapper.queryRepetitionRing();if (CollectionUtils.isEmpty(doneRingList)) {log.info("处理重复组合编码为空,处理重复组合编码 end");return;}for (DoneRingPO item : doneRingList) {List<DoneRingPO> repetitionCodeList = doneRingMapper.queryDoneRingByCode(Collections.singletonList(String.valueOf(item.getCode())));for (int i = 1; i < repetitionCodeList.size(); i++) {repetitionCodeList.get(i).setCode(redisTemplate.opsForValue().increment(DoneCacheKey.DONE_RING_CODE_INCR.getKey()));}for (DoneRingPO ringPo : repetitionCodeList) {doneRingMapper.updateRingCode(ringPo);}}log.info("处理重复组合编码 end");}

2.多线程+CompletableFuture

public void testMulti(Integer totalNum) throws Exception {int totalPage = totalNum;final List<CompletableFuture<String>> futureList = new ArrayList<>();for (int i = 1; i <= totalPage; i++) {try {final int page =i;futureList.add(CompletableFuture.supplyAsync(() -> {//TODO 执行耗时任务log.info("耗时任务page={}",page);return Integer.toString(page);}, taskExecutor));} catch (Exception e) {log.error("线程异常....", e);}}final CompletableFuture<Void> allOf = CompletableFuture.allOf(futureList.toArray(new CompletableFuture[0]));//线程等待完成allOf.get();//TODO 执行缓存任务log.info("结束");}

相关文章:

Java基础|多线程:多线程分页拉取

前言&#xff1a; 通常我们都会遇到分页拉取的需求&#xff0c;比如与第三方系统同步数据&#xff0c;定时拉取全量数据做缓存&#xff0c;下面我们简单介绍下多线程分页写法 需求&#xff1a; 全量同步第三方系统数据&#xff0c;并在全部数据同步完后&#xff0c;统一做缓存…...

Android RecyclerView 实现 GridView ,并实现点击效果及方向位置的显示

效果图 一、引入 implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30 二、使用步骤 1.Adapter public class UnAdapter extends BaseQuickAdapter<UnBean.ResultBean, BaseViewHolder> {private int selectedPosition RecyclerView.NO_POSITIO…...

Centos中dnf和yum区别对比

dnf和yum是两种不同的包管理工具&#xff0c;它们各自具有独特的特点和优势&#xff0c;主要用于在Linux系统上安装、更新和卸载软件包。以下是dnf和yum之间的主要区别&#xff1a; 1. 依赖关系解决 dnf&#xff1a;dnf在处理依赖关系方面表现出更强的能力。它能够更高效地解…...

CVPT: Cross-Attention help Visual Prompt Tuning adapt visual task

论文汇总 当前的问题 图1:在VTAB-1k基准测试上&#xff0c;使用预训练的ViT-B/16模型&#xff0c;VPT和我们的CVPT之间的性能和Flops比较。我们将提示的数量分别设置为1、10、20、50,100,150,200。 如图1所示&#xff0c;当给出大量提示时&#xff0c;VPT显示了性能的显著下降…...

基于双向 LSTM 和 CRF 的序列标注模型

基于双向 LSTM 和 CRF 的序列标注模型 在自然语言处理中,序列标注是一项重要的任务,例如命名实体识别、词性标注等。本文将介绍如何使用 Keras 构建一个基于双向 LSTM 和 CRF 的序列标注模型。 一、引言 序列标注任务要求为输入序列中的每个元素分配一个标签。传统的方法可…...

为何美国与加拿大边界看似那么随意?

我们在《日本移民巴西超200万&#xff0c;会成第二个“巴勒斯坦”吗&#xff1f;》一文中探讨了日本移民巴西的历史&#xff0c;以及移民对巴西的风险与挑战。 今天我们来探讨美国与加拿大边界为什么那么随意,并整理了加拿大和美国的国界、省界、市界行政边界数据分享给大家&a…...

什么是触发器(Trigger)?触发器何时会被触发?

在数据库管理系统中&#xff0c;触发器是一种特殊的存储过程&#xff0c;它会在特定的表上执行插入、更新或删除操作时自动触发。 触发器的主要用途是维护数据的一致性和完整性&#xff0c;以及实现一些复杂的业务逻辑。 触发器何时会被触发&#xff1f; 触发器可以在以下几…...

一步一步优化一套生成式语言模型系统

以下是这套生成式语言模型解决任务的流程图概述&#xff1a; #mermaid-svg-keXg8yGoCyObKDtu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-keXg8yGoCyObKDtu .error-icon{fill:#552222;}#mermaid-svg-keXg8yGoCyO…...

Q必达任务脚本

文章目录 1.购买服务器地址2.部署教程3. 代码如下4. 如何联系我 1.购买服务器地址 服务器购买地址 https://t.aliyun.com/U/rUHk58 若失效&#xff0c;可用地址 https://www.aliyun.com/activity/wuying/dj?source5176.29345612&userCode49hts92d 2.部署教程 2024年最…...

问请问请问2312123213123

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…...

Vue3:快速生成模板代码

目录 一.模板代码 1.提供基础结构 2.定义组件名称 3.初始化数据和方法 4.应用样式 5.提高开发效率 二.操作 1.点击右下角设置按钮选择代码片段 2.输入vue.json&#xff0c;打开vue.json文件 3.构造模板 4.模板代码 5.使用 6.效果 一.模板代码 Vue3快速生成模板代…...

文件上传-php

查找方式 ***(1) 黑盒 查找(upload) 扫描 (2) 应用型 窗口 上传中心或者后台中心 上传 Ps:后台是后台 权限是权限 (3) 会员中心 (4) 白盒 基本函数定义 写前端的 Enctype 上传类型Method 提交方式Onsubmit 鼠标的时间Action"放在指定文件"Php 接受表单数据 isset(…...

C++设计模式(更新中)

文章目录 1、创建型模式1.1 简单工厂&#xff08;Simple Factory&#xff09;&#xff08;1&#xff09;示例&#xff08;2&#xff09;总结 1.2 工厂方法&#xff08;Factory Method&#xff09;&#xff08;1&#xff09;示例&#xff08;2&#xff09;总结 1.3 抽象工厂&…...

Kali crunsh字典工具

查看自带密码字典 vim /usr/share/wordlists 使用 crunch 字典工具 随机组成6位纯数字密码 crunch 6 6 0123456789 -o test1.txt 由 Abc1234 随机组成的 6~8 位密码 crunch 6 8 Abc1234 -o test2.txt 以A开头后面跟3位数字组成的4位密码 crunch 4 4 -t A%%% -o test3.txt...

Redis系列---Redission分布式锁

文章目录 类型原理使用看门狗与setNx比较 类型 使用Redission&#xff0c;lock的机制其实是使用了ttl&#xff0c;一直等ttl为0再get。无论是redission还是redis的setNx&#xff0c;只要是锁&#xff0c;都必须有加锁和释放锁两个动作&#xff0c;二者缺一不可&#xff0c;并且…...

算法打卡:第十一章 图论part05

今日收获&#xff1a;并查集理论基础&#xff0c;寻找存在的路径 1. 并查集理论基础&#xff08;from代码随想录&#xff09; &#xff08;1&#xff09;应用场景&#xff1a;判断两个元素是否在同一个集合中 &#xff08;2&#xff09;原理讲解&#xff1a;通过一个一维数组…...

3.《DevOps》系列K8S部署CICD流水线之部署MetalLB负载均衡器和Helm部署Ingress-Nginx

架构 服务器IP服务名称硬件配置192.168.1.100k8s-master8核、16G、120G192.168.1.101k8s-node18核、16G、120G192.168.1.102k8s-node28核、16G、120G192.168.1.103nfs2核、4G、500G操作系统:Rocky9.3 后续通过K8S部署GitLab、Harbor、Jenkins 为什么使用MetalLB 当使用云平…...

MySQL:表的约束

目录 1 空属性 2 默认值 3 列描述 4 zerofill 5 主键 6 自增长 7 唯一键 8 外键 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻辑角度保证数据的正确性。比如有…...

38.重复的子字符串

方法1&#xff1a; class Solution {public boolean repeatedSubstringPattern(String s) {if (s.equals("")) return false;String s2(ss).substring(1,(ss).length()-1);//去掉首尾字符return s2.contains(s);//判断是否包含s} } class Solution(object):def rep…...

Linux服务部署指南

在现代的IT基础设施中&#xff0c;Linux操作系统因其稳定性、安全性和灵活性而广泛用于服务部署。本文将提供一个全面的指南&#xff0c;介绍如何在Linux环境下部署服务&#xff0c;包括准备工作、部署流程、以及监控和维护。 1. 准备工作 在开始部署服务之前&#xff0c;确保…...

从 API 密钥管理角度看 Taotoken 控制台提供的安全与便捷性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 从 API 密钥管理角度看 Taotoken 控制台提供的安全与便捷性 1. 引言&#xff1a;集中管理的起点 在开发涉及大模型的应用时&#…...

基于MSP430的太阳能追踪与智能调光系统设计与实现

1. 项目概述与设计初衷最近在折腾一个挺有意思的小项目&#xff0c;起因是看到小区里那些太阳能路灯&#xff0c;总觉得它们有点“傻”。大白天太阳都斜到西边了&#xff0c;电池板还傻愣愣地朝着东边&#xff1b;晚上天都黑透了&#xff0c;灯还亮得晃眼&#xff0c;后半夜路上…...

MultiFunPlayer终极指南:5分钟掌握开源设备同步软件,打造沉浸式娱乐体验

MultiFunPlayer终极指南&#xff1a;5分钟掌握开源设备同步软件&#xff0c;打造沉浸式娱乐体验 【免费下载链接】MultiFunPlayer flexible application to synchronize various devices with media playback 项目地址: https://gitcode.com/gh_mirrors/mu/MultiFunPlayer …...

Grasscutter命令生成器终极指南:如何5分钟上手原神私服管理

Grasscutter命令生成器终极指南&#xff1a;如何5分钟上手原神私服管理 【免费下载链接】GrasscutterCommandGenerator Command Generator and Gacha Banner Editor 项目地址: https://gitcode.com/gh_mirrors/gr/GrasscutterCommandGenerator Grasscutter命令生成器是一…...

深度学习立体匹配:从MC-CNN架构解析到工程实践优化

1. 项目概述&#xff1a;从传统到深度&#xff0c;立体匹配的范式革新在计算机视觉领域&#xff0c;立体匹配是一个经典且核心的问题&#xff0c;它的目标是从一对经过校正的左右图像中&#xff0c;为每个像素找到其在另一幅图像中的对应点&#xff0c;从而计算出场景的深度信息…...

RCLI:统一AI开发环境的命令行工具设计与实战

1. 项目概述&#xff1a;一个面向AI应用开发的命令行利器如果你和我一样&#xff0c;经常在本地和云端服务器之间切换&#xff0c;调试各种AI模型&#xff0c;处理数据管道&#xff0c;那么你肯定对命令行&#xff08;CLI&#xff09;又爱又恨。爱的是它的高效和可编程性&#…...

SAP ECC6 2027年停服倒计时:中小企业主必看的4条务实出路与成本分析

SAP ECC6 2027年停服倒计时&#xff1a;中小企业主必看的4条务实出路与成本分析 当2027年的钟声敲响时&#xff0c;全球数十万家企业将面临一个关键抉择&#xff1a;是继续坚守已有二十年历史的SAP ECC6系统&#xff0c;还是踏上数字化转型的新征程&#xff1f;对于资源有限的中…...

JavaScript 的速度秘密:深入理解 JIT (即时编译)

⚡ JavaScript 的速度秘密&#xff1a;深入理解 JIT (即时编译) &#x1f914; 为什么 JavaScript 能这么快&#xff1f; 在早期&#xff0c;JavaScript 是一种解释型语言。浏览器逐行读取代码&#xff0c;翻译成机器指令并执行。这种方式启动快&#xff0c;但运行慢&#xf…...

BilibiliDown:跨平台B站视频下载完整解决方案实战指南

BilibiliDown&#xff1a;跨平台B站视频下载完整解决方案实战指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors/b…...

Adobe-GenP:3分钟解锁Adobe全系列专业软件的秘密武器

Adobe-GenP&#xff1a;3分钟解锁Adobe全系列专业软件的秘密武器 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 还在为Adobe Creative Cloud的高昂订阅费烦恼吗&am…...