采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
geely老师,这里为什么要对lockValueStr进行一个非空判断呢。
如果lockValueStr为null,那应该代表当前是没锁的,可以安全加锁. 那为什么lockValueStr为null会跳进else里呢
你好,同学,这是一个非常好的问题。是因为分布式锁那个key肯定会有可能消失的,如果消失了,get出来的就是null。 如果不为null,所以判断这个时间可以理解对吧。然后就是咱们这if是个条件,还有一个时间戳判断,于是首先防止NPE,做了一个非空判断。合并到一起判断了。
如果if ==null 直接获取锁也是可以的。那这就是一个无限循环了,为何不交给这次定时任务自己递归呢。
这里还有一个自旋锁的概念,对于定时任务,不要用自旋锁,最好是给结束的条件的。
如果这个时候else里面不写setnx,而是写上面getset一样的逻辑,不就不识自旋了吗
else里面可以用getset代替setnx防止无限循环吧,老师
登录后可查看更多问答,登录/注册
Tomcat集群+Redis分布式+代码重构+源码原理解析
1.6k 17
2.6k 12
1.7k 12
1.6k 11
1.9k 10