HibernateTemplate().refresh(obj, LockMode.UPGRADE);上面的代码行是否会阻止所有线程继续执行?
另外,这个锁什么时候会释放?
是在休眠会话的末尾吗?
当锁被释放时,获取锁并唤醒现有线程的开销有多大?谢谢
发布于 2015-02-01 14:53:24
Hibernate锁请求被委托给数据库,因此不会发生内存中的Java锁定。
LockMode.Upgrade为equivalent to PESSIMISTIC_WRITE,这意味着在关联的数据库行上采用排它锁。
当前锁将阻止其他事务获取此特定行的共享/排他锁,直到当前事务结束(提交或回滚)。
如果其他线程不需要使用这个特定的数据库行锁,那么就不会发生争用。
线程不会像在Java中那样被唤醒。等待锁的数据库进程将永远不会进入睡眠状态。您还可以配置获取锁的时间间隔。
https://stackoverflow.com/questions/28255368
复制相似问题