0
Hibernate有PESSIMISTIC锁定机制,可用于锁定数据库行。使用hiberante锁定对象session.load
session.lock(Object object,LockMode lockMode)。
可以说,我锁定一个目标:
1)session.lock(myObject.LockMODE.READ)
2)session.lock(myObject,LockMODE.UPGRADE)
3)session.lock(myObject.LockMODE.UPGRADE_NOWAIT)
- 如果其他线程还发出上述statments 1,将happend给它什么 ?该线程是否会阻塞?或者它会得到 某种异常吗?CannotAcquireLock异常?我想 想了解1,2,3的行为。
如果一个线程获得一个锁,然后死了会发生什么? 锁会自动释放吗?还是记录永久锁定?
session.lock(myObject,LOCKMODE.SOME_LOCK_MODE) //thread dies . (lets say JVM is killed)
感谢您的回答。如何让我的另一个线程不要等待?我想要其他线程返回(可能有一些例外),如果他们不能获取锁定。 – user93796 2014-10-10 07:38:31
我不确定这是可能的。我只是在我们使用lock()的地方检查了代码,但是我没有看到那种类型。如果它真的转化为select for update,那么数据库会锁定你。你需要锁定不同的虚拟机,还是只需要在一台虚拟机中?在后一种情况下,您可以尝试一些Java同步机制。 – 2014-10-10 07:55:57