关于redis分布式锁的使用,小弟有疑问 20C

RedisLock lock = new RedisLock(redisTemplate, taskId, 50000, 60000);
这是a服务端初始化锁
方法aMethod里面先加锁,lock.lock()然后在Amethod里面调用服务端b的方法bMethod
在进入bMethod方法也用了
RedisLock lock = new RedisLock(redisTemplate, taskId, 50000, 60000);
然后去lock,在本人的理解下aMethod还没有unlock,bMethod是获取不到锁的,
但是代码中却是这么写的,本人很不理解。
希望大佬说一下。redis是同一个。

3个回答

我怎么柑橘没啥问题。对a方法加锁是a的锁,b方法加锁是b的锁,这个两个锁不存在你说的在a方法中调用b方法b方法就获取不到锁了。

StackTc
StackTc redis分布式锁了解一下
接近 2 年之前 回复
StackTc
StackTc 他们的key都是taskid,老哥
接近 2 年之前 回复

锁级别是对象的,你去了解下吧。

StackTc
StackTc 你在逗我吧?
接近 2 年之前 回复

锁的是taskId吧,这个redis的键就是锁对象,是共享的,RedisLock的lock()是怎么实现的?使用了synchronized吧,这是可重入锁,这么说能理解吗?

StackTc
StackTc 回复gf0515: 不是通一个线程啊 Bmethod是另外一个端口的方法,比如A方法是8080的B方法是8081的
接近 2 年之前 回复
gf0515
Fatal Error 你不是在Amethod里面调用的Bmethod吗?这是同一个线程啊。
接近 2 年之前 回复
StackTc
StackTc 回复gf0515: 老哥,2个方法 是不同服务端的
接近 2 年之前 回复
gf0515
Fatal Error 可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响
接近 2 年之前 回复
StackTc
StackTc 不能理解,按照道理来说锁是一个,为什么2个地方可以同时获取呢
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐