1.什么是羊群效应?
当jvm释放锁的时候,会唤醒正在等待的jvm 从新进入到获取锁的状态。
如果正在阻塞的等待获取锁的jvm,如果有几十个或者几百个、上千个的情况下
ZkServer端唤醒所有正在等待的jvm,从新进入到获取锁的状态,唤醒的成本是非常高
有可能会造成我们ZkServer端阻塞。
2.业务超时,一直不释放锁如何处理?
1.可以采用续命设计
业务如果超时(),续命多次(3次)如果还是没有释放锁的情况下,则认为超时。
2.续命多次依旧超时应该
- 主动释放锁;
- 事务回滚;
- 主动停止阻塞的线程;
- 移除key
3.代码思路:
记录每次获取锁的线程;锁的信息 事务信息
业务如果超时 定义:当前线程获取到锁之后,在规定时间内需要释放锁,
避免其他的jvm一直阻塞等待;