HibernateTemplate().refresh(obj, LockMode.UPGRADE);
上面的行会阻止所有线程,包括不同机器上的线程继续执行吗?
这个锁什么时候会被释放?
它是在休眠会话结束时吗?
锁定释放后获取锁定并唤醒现有线程的成本是多少?谢谢
Hibernate锁请求被委托给数据库,因此不会发生内存中的Java锁定。
LockMode.Upgrade
是equivalent to PESSIMISTIC_WRITE,意味着在相关的数据库行上采用了独占锁。
当前锁定将阻止其他事务获取此特定行的共享/独占锁,直到当前事务结束(提交或回滚)。
如果其他线程不需要采用此特定数据库行锁定,则不会发生争用。
线程没有被唤醒,就像在Java中发生的那样。等待锁定的数据库进程永远不会进入休眠状态。您也可以配置锁定获取的时间间隔。