2つのスレッドがGenericObjectPoolから2つの再利用可能なインスタンスを要求し、次のデータセット応答で作業を開始します-
Thread 1 [ Rec1, Rec1, Rec2 ]
Thread 2 [ Rec1, Rec3, Rec2 ]
Thread 3 [ Rec3 ]
これらのレコードは最初に検索する必要があります。見つからない場合は、テーブルのセットにのみ挿入されます。したがって、thread1では、Rec1が2回発生すると、順次実行されるため、安全に処理されます。ただし、プールから2番目のインスタンスのThread2にもRec1があるため、インスタンス間で競合が発生するため、Rec2と同様に、Rec3も繰り返されます。
そして、クラス自体は次のようになります-
Method1
--------
loop on all records
check condition1
If Meets
lock obj
Recheck condition1
if meets
INSERT1
release lock
end loop
と ..
Method 2
---------
loop on all records
check condition2
If Meets
lock obj
Recheck condition2
if meets
INSERT2
release lock
end loop
「obj」ロックに関する提案?静的finalにすると解決しますが、クラスレベルのロックを多用するため、プログラムはほぼシーケンシャルになります。