请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

分布式锁里lockValue的判断

https://img1.sycdn.imooc.com//szimg/5a790d79000155c914310309.jpg

geely老师,这里为什么要对lockValueStr进行一个非空判断呢。

如果lockValueStr为null,那应该代表当前是没锁的,可以安全加锁. 那为什么lockValueStr为null会跳进else里呢


正在回答 回答被采纳积分+3

1回答

Geely 2018-02-06 22:38:20

你好,同学,这是一个非常好的问题。是因为分布式锁那个key肯定会有可能消失的,如果消失了,get出来的就是null。 如果不为null,所以判断这个时间可以理解对吧。然后就是咱们这if是个条件,还有一个时间戳判断,于是首先防止NPE,做了一个非空判断。合并到一起判断了。

如果if ==null 直接获取锁也是可以的。那这就是一个无限循环了,为何不交给这次定时任务自己递归呢。

这里还有一个自旋锁的概念,对于定时任务,不要用自旋锁,最好是给结束的条件的。

2 回复 有任何疑惑可以回复我~
  • 如果这个时候else里面不写setnx,而是写上面getset一样的逻辑,不就不识自旋了吗
    回复 有任何疑惑可以回复我~ 2020-08-23 22:07:39
  • else里面可以用getset代替setnx防止无限循环吧,老师
    回复 有任何疑惑可以回复我~ 2020-08-23 22:08:37
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信