分布式锁里lockValue的判断

来源:14-3 分布式锁双重防死锁演进

慕粉1469778543

2018-02-06

http://img.mukewang.com/szimg/5a790d79000155c914310309.jpg

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

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


写回答

1回答

Geely

2018-02-06

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

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

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

2
2
崇拜者_
else里面可以用getset代替setnx防止无限循环吧,老师
2020-08-23
共2条回复

Java企业级电商项目架构 Tomcat集群与Redis分布式

Tomcat集群+Redis分布式+代码重构+源码原理解析

2685 学习 · 947 问题

查看课程