工作流中高并发问题的出错提示和处理方式

处理的bug,在工作流引擎中,如果同时开启多条线程对同一个环节进行状态更新,若存在线程正在更新,其他访问的线程就会返回一个ActivitiOptimisticLockingException 异常 :

(toString(updatedObject)+" was updated by another transaction concurrently"); 

经过一些资料查询,问题发生的原理是在serviceTask完成后,更新的ExecutionEntity 是同一条记录,而每一个serviceTask 此时处于 

两个不同的线程和事务当中,两个事务彼此不可见,任务开始时获取的ExecutionEntity完成相同,当一个事务成功更新后, 

另一个事务就会失败。这样保证了流程的准确执行,当该任务失败后,会在下一个JobExecutor 扫描时重新执行。此时获取的 

execution 的版本已经加1,此时任务正常结束。

处理并发问题牵涉到多线程管理。我的处理方式是对前一线程进行xx.join();保证前一线程结束后才开始下一组的线程处理,避免并发情况的发生

你可能感兴趣的:(工作流中高并发问题的出错提示和处理方式)