2016-11-24 215 views
0

假設有多實例任務,分配給用戶。每一個實例都有TaskListener當任務性的判定更新其修改過程變量。當兩個偵聽器一起運行並嘗試修改相同的流程變量時,activit如何處理這種情況?這個修改是否是線程安全的?如何處理活性狀況過程concurent修改變量?

回答

3

進程的DB事務內部執行。如果進程(或其偵聽器)修改了進程變量,它們將在此事務內部進行存儲/更新。一旦進程的同步部分結束,事務就被提交。因此,如果兩個並行工作的進程執行修改相同的變量,其中一個執行將提交事務,但另一個執行失敗,也就是在所有工作完成後(通常引擎會引發樂觀鎖定異常)。失敗的部分稍後將由作業執行者重新運行,但最好避免同時修改。

如果流程執行修改了不同的變量,它們都可以提交它們的事務。

Activiti引擎代碼是線程安全的。線程安全對於聽衆來說也是強制性的。如果你的代碼不是線程安全的,你不應該在監聽器中使用它。