activi如何处理concurent过程变量修改?

时间:2016-11-24 05:00:59

标签: java alfresco activiti bpmn

假设有多实例任务,分配给2个用户。每个实例都有TaskListener,可在更新任务属性时修改过程变量。当两个侦听器一起运行并尝试修改相同的流程变量时,activit如何处理这种情况?这个mnodification线程是否安全?

1 个答案:

答案 0 :(得分:3)

进程在数据库事务中执行。如果process(或其侦听器)修改了流程变量,则会在此事务中存储/更新它们。一旦进程的异步部分结束,就会提交事务。

因此,如果两个并行工作的进程执行修改相同的变量,其中一个执行将提交事务,但另一个执行将在提交时失败,即在所有工作完成后(通常引擎抛出乐观锁定异常)。失败的部分将由作业执行者稍后重新运行,但最好避免并发修改。

如果流程执行修改了不同的变量,它们都可以提交事务。

Activiti引擎代码是线程安全的。对于听众来说,线程安全也是必需的。如果您的代码不是线程安全的,则不应在侦听器中使用它。