【发布时间】:2013-02-27 22:53:54
【问题描述】:
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”锁的建议?将其设置为 static final 将解决它,但由于广泛使用类级别锁定而使程序几乎是连续的..
【问题讨论】:
标签: java multithreading