List<Cbzl> cbzls = new ArrayList<>();
// 开启多线程
ThreadPoolExecutor threadPoolExecutor = ThreadUtil.newExecutor(20, 10000);
List<List<String>> searchPartitons = Lists.partition(new ArrayList<>(cmdmSet),50);
// 每个线程都会独立执行,并且不确定哪个线程先执行完,因此需要加一个等待函数(视情况分析,例如发邮件不用拦截),
// eg:例如现在有五组,countdownlatch个数为5
// 当执行完某个线程时,countdown()就会减一,当减到0时,await()(相当于栅栏)就会检测到全部执行完,就可以进行放行
// await()方法主要作用就是让主线程暂停等待子线程执行完后,在执行主线程后面的程序,确保cbzlList全部add上
CountDownLatch countDownLatch = ThreadUtil.newCountDownLatch(searchPartitons.size());
for (List<String> searchPartition : searchPartitons) {
threadPoolExecutor.execute(() -> {
LambdaQueryWrapper<Cbzl> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(Cbzl::getCmdm, searchPartition);
List<Cbzl> cbzlList = this.cbzlMapper.selectList(queryWrapper);
cbzls.addAll(cbzlList);
countDownLatch.countDown();
});
}
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
return cbzls;