求解java多线程下数据一致性问题

loxeed 2016-07-09 12:02:54
有这么个场景:有一个订单,包含3个订单项,分别是A、B、C,客户提交订单后将进入订单审批流程,但3个订单项分别由3个人审批,而且是并行审批,现在要求审批人在审批的时候如果发现当前审批的订单项是最后一个待审批的,那么审批后就把整个订单的状态改成已审批,否则不改。所以问题来了,如果A订单项已经审批过了,而审批B和C的两个审批人同时打开审批页面,那么二者都会认为自己当前审批的订单项不是最后一个,就都不会改整个订单的状态,导致流程陷入僵局。我想了很久,觉得java的对象锁和类锁都无法实现,要么锁不住要查询和修改的数据(因为对于数据库中的同一条订单数据,读取到程序中后实际上并不是只能生成同一个对象),要么会导致其他订单的审批受到阻塞(因为审批方法是所有订单通用的,如果对类上锁,会导致其他订单也阻塞),而部署人员又不允许用后台进程扫描的方式实现,请问高手怎么在业务上实现?(请用java语言,不一定非要用线程同步的方法,如果有更简单的处理方法更好)
...全文
237 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
狂暴的小猴儿 2016-07-09
  • 打赏
  • 举报
回复
你别在打开页面的时候做处理啊 直接在两个人审批各自的订单项之后做判断不就可以加事务了么 每个人的审批和审批之后的查询 加到一个事务里头 这个时候如果他审批通过了他的项目而且查询到三项 都已经通过那么在返回值里头就告诉他可以整个订单通过了 给他提供一个按钮不就完了么

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧