07-线程池并行查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
* 多线程并行查询
*/
private IbStatistics parallelQuery(IbStatistics statistics, ... ...) throws InterruptedException {
//创建线程池执行器(最好是自定义线程池,参考阿里巴巴java开发规范)
ExecutorService executorService = Executors.newFixedThreadPool(4);
//创建线程任务1
executorService.submit(() -> {
//积分当日发放总数: 端&日期
Long releasedTotal = ibUserrecordService.getIntegralTotalByDate(... ...);
statistics.setStatisticsReleasedtotal(releasedTotal);
});
//创建线程任务2
executorService.submit(() -> {
//积分当日消耗总数: 端&日期
Long usedTotal = ibUserrecordService.getIntegralTotalByDate(... ...);
statistics.setStatisticsUsedtotal(usedTotal);
});
//创建线程任务3
executorService.submit(() -> {
//积分当日发放人数: 端&日期
Integer releasedUserTotal = ibUserrecordService.getUserCountByDate(... ...);
statistics.setStatisticsReleasedusertotal(releasedUserTotal);
});
//创建线程任务4
executorService.submit(() -> {
//积分当日消耗人数: 端&日期
Integer usedUserTotal = ibUserrecordService.getUserCountByDate(... ...);
statistics.setStatisticsUsedusertotal(usedUserTotal);
});
//关闭线程任务
executorService.shutdown();
//关闭执行器, awaitTermination 在线程池中的正在执行的任务和队列中的任务线程全部执行完成前处于阻塞状态
executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.MINUTES);
//用户持有积分总数=当日发放总数-当日消耗总数
statistics.setStatisticsHoldtotal(... ...);
//持有积分用户人数=当日发放人数-当日消耗人数
statistics.setStatisticsHoldusertotal(... ...);
return statistics;
}

07-线程池并行查询
https://janycode.github.io/2021/10/17/02_编程语言/01_Java/01_JavaSE/05_并发和锁/07-线程池并行查询/
作者
Jerry(姜源)
发布于
2021年10月17日
许可协议