求解java多线程下数据一致性问题
有这么个场景:有一个订单,包含3个订单项,分别是A、B、C,客户提交订单后将进入订单审批流程,但3个订单项分别由3个人审批,而且是并行审批,现在要求审批人在审批的时候如果发现当前审批的订单项是最后一个待审批的,那么审批后就把整个订单的状态改成已审批,否则不改。所以问题来了,如果A订单项已经审批过了,而审批B和C的两个审批人同时打开审批页面,那么二者都会认为自己当前审批的订单项不是最后一个,就都不会改整个订单的状态,导致流程陷入僵局。我想了很久,觉得java的对象锁和类锁都无法实现,要么锁不住要查询和修改的数据(因为对于数据库中的同一条订单数据,读取到程序中后实际上并不是只能生成同一个对象),要么会导致其他订单的审批受到阻塞(因为审批方法是所有订单通用的,如果对类上锁,会导致其他订单也阻塞),而部署人员又不允许用后台进程扫描的方式实现,请问高手怎么在业务上实现?(请用java语言,不一定非要用线程同步的方法,如果有更简单的处理方法更好)