弹簧休眠锁是否适用于不同计算机上的其他线程


HibernateTemplate().refresh(obj, LockMode.UPGRADE);

上面的行是否会阻止所有线程(包括其他计算机上的线程)继续执行?

另外这个锁什么时候会释放?

是在休眠会话结束时吗?

释放锁时获取锁并唤醒现有线程的成本有多高?谢谢

休眠锁定请求被委托给数据库,因此不会发生内存中的 Java 锁定。

LockMode.Upgrade等效于 PESSIMISTIC_WRITE,这意味着对关联的数据库行采用独占锁。

当前锁将阻止其他事务获取此特定行的共享/独占锁,直到当前事务结束(提交或回滚)。

如果其他线程不需要采用此特定数据库行锁,则不会发生争用。

线程不会像在 Java 中那样被唤醒。等待锁定的数据库进程永远不会进入睡眠状态。您也可以为锁采集配置时间间隔。

相关内容