【发布时间】:2012-02-08 16:50:48
【问题描述】:
用下面的函数说:
getUnique(){
MyObject obj = getValueFromDb();
obj.modifyIt();
obj.commit();
}
当同时调用此方法时,多个线程共享相同的 MyObject 值,但我希望每个线程都有唯一的值。
为了解决这个问题,我使用class.getInstance().myMethodCall() 使用线程同步来获取某些属性的唯一值,这解决了目的,但是随着同时调用的到来,它降低了函数的效率。
有没有更好的方法来解决这个问题? (使用STRUTS,HIBERNATE3.0)
【问题讨论】:
-
了解 myMethodCall 中的内容会有所帮助:您如何连接到数据库?您在共享连接吗?
-
@savinos 除了属性上的一些变化外,什么都没有。可以假设 Hibernate 事务在方法启动时启动,并在方法调用结束时提交。
-
是的 getValueFromDb() 已同步
-
您是否使用诸如 Hibernate 之类的持久性 API 来执行您的数据访问?如果是这样,重复值可能是由于缓存造成的。
-
@mcfinnigan 使用 HIBERNATE3.0
标签: java hibernate synchronization thread-safety thread-synchronization