HibernateTemplate().refresh(obj, LockMode.UPGRADE);
上面的行会阻止所有线程(包括不同机器上的线程)继续执行吗?
还有这个锁什么时候会被释放?
是在 hibernate session 结束时吗?
获取锁并在锁释放时唤醒现有线程的成本有多高? 谢谢
最佳答案
Hibernate 锁定请求被委托(delegate)给数据库,因此不会发生内存中 Java 锁定。
LockMode.Upgrade
是 equivalent to PESSIMISTIC_WRITE ,这意味着在关联的数据库行上采用了独占锁。
当前锁将阻止其他事务获取该特定行的共享/独占锁,直到当前事务结束(提交或回滚)。
如果其他线程不需要获取此特定的数据库行锁,则不会发生争用。
线程不会被唤醒,就像 Java 中那样。等待锁的数据库进程永远不会进入休眠状态。您也可以配置获取锁的时间间隔。
关于java - Spring hibernate 锁是否适用于不同机器上的其他线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28255368/