2 个线程从 GenericObjectPool 中声明 2 个可重用实例,并开始处理以下数据集 -
Thread 1 [ Rec1, Rec1, Rec2 ]
Thread 2 [ Rec1, Rec3, Rec2 ]
Thread 3 [ Rec3 ]
必须首先查找这些记录,如果找不到,则仅插入一组表中。因此,在 thread1 中,Rec1两次出现被安全地处理,因为它按顺序运行。但是,由于实例之间存在争用,因为 Pool 中的第二个实例上的 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”锁的建议?将其设为静态最终将解决它,但由于广泛使用类级别锁定而使程序几乎是连续的。