//创建线程池
private static ThreadPoolExecutor threadPoolExecutor ;
static {
threadPoolExecutor = new ThreadPoolExecutor(4, 10, 60, TimeUnit.SECONDS,new LinkedBlockingDeque<>(10000), Executors.defaultThreadFactory(),new ThreadPoolExecutor.DiscardPolicy());
}
public List<T> dealWithListByThread(List<T> list) {
//最终结果
List<T> result = new ArrayList<>();
if(CollectionUtil.isNotEmpty(list)){
//每次处理100个,集合按固定数量分成子集合,hutool工具类
List<List<T>> split = ListUtil.split(list, 100);
log.info("拆分个数:{}",split.size());
CountDownLatch countDownLatch = new CountDownLatch(split.size());
List<Future<List<T>>> futureList = new ArrayList<>();
for ( List<T> itemList : split){
Future<List<T>> submit = threadPoolExecutor.submit(new Callable<List<T>>() {
@Override
public List<T> call(){
//TODO 处理itemList,并返回处理后的数据
return itemList ;
}
});
futureList.add(submit);
countDownLatch.countDown();
}
try {
countDownLatch.await();
for(Future<List<T>> item : futureList){
result.addAll(item.get());
}
} catch (Exception e) {
log.error("多线程处理分页数据异常:",e);
}
}
return result;
}