假设有多实例任务,分配给2个用户。每个实例都有TaskListener
,可在更新任务属性时修改过程变量。当两个侦听器一起运行并尝试修改相同的流程变量时,activit如何处理这种情况?这个mnodification线程是否安全?
答案 0 :(得分:3)
进程在数据库事务中执行。如果process(或其侦听器)修改了流程变量,则会在此事务中存储/更新它们。一旦进程的异步部分结束,就会提交事务。
因此,如果两个并行工作的进程执行修改相同的变量,其中一个执行将提交事务,但另一个执行将在提交时失败,即在所有工作完成后(通常引擎抛出乐观锁定异常)。失败的部分将由作业执行者稍后重新运行,但最好避免并发修改。
如果流程执行修改了不同的变量,它们都可以提交事务。
Activiti引擎代码是线程安全的。对于听众来说,线程安全也是必需的。如果您的代码不是线程安全的,则不应在侦听器中使用它。