2016-11-24 10 views
0

2人のユーザーに割り当てられたマルチインスタンスタスクがあるとします。すべてのインスタンスには、タスクのプロパティが更新されるときにプロセス変数を変更するTaskListenerがあります。両方のリスナーが一緒に実行され、同じプロセス変数を変更しようとすると、どのように状況を処理するのですか?この変更はスレッドセーフであるかどうか?どのようにしてアクチシがプロセスのプロセス変数の変更を処理しますか?

答えて

3

プロセスは、DBトランザクション内で実行されます。プロセス(またはそのリスナー)がプロセス変数を変更すると、それらはこのトランザクション内に格納/更新されます。プロセスの非同期部分が終了すると、トランザクションがコミットされます。

したがって、並列で動作する2つのプロセス実行が同じ変数を変更すると、実行の1つはトランザクションをコミットしますが、もう1つはコミットに失敗します。つまり、すべての作業が完了した後です(通常、エンジンはオプティミスティック・ロック例外をスローします)。失敗した部分は後でジョブエグゼキュータによって再実行されますが、同時に変更することは避けてください。

プロセスの実行によって異なる変数が変更された場合、それらのプロセスは両方ともトランザクションをコミットできます。

Activitiエンジンコードはスレッドセーフです。またスレッドセーフは、リスナーにとって必須です。コードがスレッドセーフでない場合は、それをリスナーで使用しないでください。

関連する問題