使用CountDownLatch解决实际业务问题的思考过程

本文记录了一次使用CountDownLatch解决并发业务场景的问题。在高管审批应用中,提交审批时需同步执行其他操作,但不同事务导致数据冲突。尝试同步调用、优化业务逻辑后,最终采用CountDownLatch确保submit方法完成并提交事务后再执行doExecute,避免了用户体验下降和并发问题。
摘要由CSDN通过智能技术生成

使用CountDownLatch解决实际业务问题过程

使用的技术比较简单,主要记录下思考和解决的过程

业务背景:

1、高管在页面对审批申请单进行审批(调用submit()方法)

2、新的产品需求,要在审批提交时,同步执行另外的一系列操作(已有现成的doExecute()方法,直接调用即可)

3、数据库为MySQL(事务的隔离级别为默认,可重复读),代码中事务由spring事务管理器管理

开发过程:

直接在submit()方法中新起一个线程调用doExecute()方法

出现问题:

测试过程中发现部分数据状态未正常更新,排查代码逻辑未发现问题,后发现submit()方法更新了A表,doExecute()方法也更新了A表,这两个方法是在不同的线程中执行的,属于不同的事务,后提交的事务会覆盖前一事务提交的信息。

解决方法

1、改成同步调用doExecute()方法。之后发现,doExecute()方法逻辑非常复杂,执行时间较长,需要5.5秒中,原submit()方法执行时间约2.4秒,一共需要用户等待8秒,严重影响了用户体验,而且此用户一般为高管。

2、优化doExecute()业务逻辑代码。经过痛苦的业务逻辑梳理,代码优化后,执行时间减少了1.4秒,杯水车薪。

3、既然两个方法本就不需要同步执行,那我等submit方法执行完成之后,也就是事务提交之后再调用doExecute()方法即可。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值