线程池结合 CountDownLatch 进行任务分批并行处理
/**
* 模拟线程池分批处理任务,主线程需要等待子任务线程执行完,结果汇总之后,主线程继续往下执行
*/
public void handleLogin(List<String> paramList) {
// 使用线程池中线程分批处理业务逻辑,并行处理任务提高终端响应速度
CountDownLatch latch = new CountDownLatch(paramList.size());
for (String param : paramList) {
ThreadUtils.execute(() -> {
try {
log.info("业务逻辑处理,参数:{}", param);
// 业务逻辑正常处理......
} catch (Exception e) {
log.error("调用下游系统出现错误,异常逻辑处理......");
} finally {
// 业务逻辑处理完毕,计数器减一【当前线程处理任务完毕,线程释放进入线程池,等待处理下一个任务】
latch.countDown();
}
});
}
// 主线程需要等待子任务线程执行完,结果汇总之后,主线程继续往下执行
try {
latch.await();
} catch (Exception e) {
log.error("等待超时", e);
throw new RuntimeException("系统处理超时,请稍后再试");
}
}
10-27
1766
05-29
522