使用多线程批量处理数据,可以使用下面的线程类
/**
* @Auther: hsd
* @Date: 2022/11/30 09:19
* @Description: 线程类
*/
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
/**
* @param <H> 为被处理的数据类型
* @param <T>返回数据类型
*/
public abstract class MultiThread<H,T>{
private final ExecutorService exec; //线程池
private final BlockingQueue<Future<T>> queue = new LinkedBlockingQueue<>();
private final CountDownLatch startLock = new CountDownLatch(1); //启动门,当所有线程就绪时调用countDown
private final CountDownLatch endLock; //结束门
private final List<H> listData;//被处理的数据
/**
* @param list list.size()为多少个线程处理,list里面的H为被处理的数据
*/
public MultiThread(List<H> list){
if(list!=null&&list.size()>0){
this.listData = list;
exec = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); //创建线程池,线程池共有nThread个线程
endLock = new CountDownLatch(list.size()); //设置结束门计数器,当一个线程结束时调用countDown
}else{