多线程 分批调用方法接口

2024-05-01 09:58

本文主要是介绍多线程 分批调用方法接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

工具类 

public abstract class BatchHandlerList<T> implements BatchHandlerInterface<T> {private static final Logger LOGGER = Logger.getLogger(BatchHandlerList.class);//每次处理条数private Integer perNum;private List<T> aylist;public BatchHandlerList(Integer perNum, List<T> aylist) {super();this.perNum = perNum;this.aylist = aylist;}/*** 分批调用方法* */public void handlerList(){try{if(aylist!=null && aylist.size() > 0){int size = aylist.size();int startIndex = 0;int endIndex = 1;int num = 1;if (size > perNum) {num = size / perNum;}for (int i = 1; i <= num; i++) {endIndex = (i) * perNum > size ? size : (i) * perNum;List<T> subList = aylist.subList(startIndex, endIndex);startIndex = perNum * i;if (subList!=null && subList.size() > 0) {handler(subList);}if (num == i && perNum * num < size) {//最后一批处理subList = aylist.subList(perNum * num, size);if (subList.size() > 0) {handler(subList);}}}}}catch(Throwable e){LOGGER.error("batchHandlerList handler exception",e);//错误回调方法可以重写errorHandler();}}public void errorHandler(){};
}

实现方法

//组装数据BatchHandlerList<String> handler = new BatchHandlerList<String>(20,waybillNos) {@Overridepublic void handler(List<String> subList) {//这里的records用的是引用传递 后面要用SispInfoRequestInfoRunnable sispRunable = new SispInfoRequestInfoRunnable(subList, contextOrder, language, count, records);sispInfoExecutor.execute(sispRunable);runList.add(sispRunable);}};//执行调用handler.handlerList();

SispInfoRequestInfoRunnable  

import java.util.List;
import java.util.Map;import org.apache.log4j.Logger;import com.sf.iec.common.util.SispWsUtil;
import com.sf.iec.operationbusiness.sisp.bean.BarRecord;public class SispInfoRequestInfoRunnable implements Runnable{protected final Logger LOGGER = Logger.getLogger(getClass());private List<String> subList;private String contextOrder;private String language;private Integer count;private Map<String, Map<String,BarRecord>> records;public SispInfoRequestInfoRunnable(List<String> subList,String contextOrder, String language, Integer count,Map<String, Map<String, BarRecord>> records) {super();this.subList = subList;this.contextOrder = contextOrder;this.language = language;this.count = count;this.records = records;}private boolean status = false; // 线程是否执行完成@Overridepublic void run() {try{Map<String, Map<String,BarRecord>> recordMap = SispWsUtil.querySispRecord(subList, contextOrder,language,count);records.putAll(recordMap);}catch(Throwable e){LOGGER.error("SispInfoRequestInfoRunnable running exception",e);}finally{status = true;}}public boolean getStatus() {return status;}	public List<String> getSubList() {return subList;}public void setSubList(List<String> subList) {this.subList = subList;}public String getContextOrder() {return contextOrder;}public void setContextOrder(String contextOrder) {this.contextOrder = contextOrder;}public String getLanguage() {return language;}public void setLanguage(String language) {this.language = language;}public Integer getCount() {return count;}public void setCount(Integer count) {this.count = count;}public Map<String, Map<String, BarRecord>> getRecords() {return records;}public void setRecords(Map<String, Map<String, BarRecord>> records) {this.records = records;}public Logger getLOGGER() {return LOGGER;}public void setStatus(boolean status) {this.status = status;}public SispInfoRequestInfoRunnable(){}
}

 

这篇关于多线程 分批调用方法接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/951384

相关文章

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告:

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

python 3.8 的anaconda下载方法

《python3.8的anaconda下载方法》本文详细介绍了如何下载和安装带有Python3.8的Anaconda发行版,包括Anaconda简介、下载步骤、安装指南以及验证安装结果,此外,还介... 目录python3.8 版本的 Anaconda 下载与安装指南一、Anaconda 简介二、下载 An

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接