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