记录通过多线程将同步查询改为异步查询

记录通过多线程将同步查询改为异步查询

当有任意线程报错时,停止所有线程查询,并抛出异常

**// 1. 创建固定大小的线程池(3个线程)**
        ExecutorService executor = Executors.newFixedThreadPool(3);
        *MsunThreadContextHolder holder = MsunThreadContextHolder.capture();*
        //获取患者费属性
        CompletableFuture<Void> patChargeFuture = CompletableFuture.runAsync(() -> {
            holder.inject();
            buildPatChargeProperties(findSettleBillDetailDTO,patInHosBillRecordVO);
        }, executor);
        //获取患者结算单
        CompletableFuture<Void> settleMainFuture = CompletableFuture.runAsync(() -> {
            holder.inject();
            buildSettleMainAndSettleDetail(findSettleBillDetailDTO,patInHosBillRecordVO);
        }, executor);
        //获取患者门急诊转住院费用
        CompletableFuture<Void> billRecordAmtFuture = CompletableFuture.runAsync(() -> {
            holder.inject();
            buildBillRecordAmt(findSettleBillDetailDTO,patInHosBillRecordVO);
        }, executor);
        **//定义组合任务:所有任务完成 或 任意任务失败**
        CompletableFuture<Void> allDone = CompletableFuture.allOf(patChargeFuture, settleMainFuture, billRecordAmtFuture);
        if (allDone.isCompletedExceptionally()) {
            // 任意一个任务失败,取消所有未完成的任务
            allDone.cancel(true);
        }
        try {
            //等待所有任务完成
            allDone.get();
            log.info("获取患者住院结算单、结算明细及费用属性完成");
        } catch (Exception e) {
            log.error("获取患者住院结算单、结算明细及费用属性异常traceId:{},excep={}",TraceLogConstant.getTraceId(),e);
        } finally {
            executor.shutdownNow();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值