redisson实现的分布式锁是可重入的吗?

首先理解可重入锁:
可重入锁,又叫做递归锁,是指在同一个线程在外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁(前提是同一个对象或者class),不会因为之前已经获取过锁而导致锁的阻塞。
这种锁的优点是避免了因线程在获取锁的过程中阻塞,从而造成的死锁现象。即,线程可以进入任何一个它已经拥有的锁所同步着的代码块。
例如,有两个方法 method1 和 method2,两个方法都是 synchronized 的,那么当一个线程进入 method1 之后,获取了这个对象的锁,它可以进入 method2,而不需要再次获取锁。因为这两个方法是由同一个线程来调用的,所以它已经有了这个锁,可以直接使用,不会被阻塞。
例如,假设我们需要读取一个文件,整个读取过程我们会上一把锁保证数据的一致性,这期间如果我们需要做一些额外的操作,比如读取第一行和最后一行,这两个操作又需要独立上锁来保证其原子性,那么因为这两个操作都在整个读取文件的锁的保护下,那么这个锁就需要是可重入的。
这就是所谓的可重入,其主要使得编程模型更为简单,防止了死锁的发生。

redisson的可重入锁有什么应用场景吗

Redisson 的可重入锁(RLock)在各种需要分布式锁的场景中都有应用,如:

确保多个线程或进程间的互斥执行:例如,你有一个需要同步执行的任务,要确保在多个线程或进程间,同一时间只有一个线程或进程执行该任务,这时就需要用到分布式锁。由于 Redisson 的可重入锁是可重入的,因此它支持一个线程对同一把锁多次加锁,这对于有嵌套锁需求的情况非常有用。

分布式事务:在处理多个服务、多个资源涉及的事务时,往往需要用到分布式锁,确保在事务处理期间,相关的资源不会被其它事务修改。

分布式系统中的数据一致性问题:在分布式环境下,多节点对共享数据进行写操作时,往往需要用到分布式锁,以保证数据操作的原子性和一致性。

防止缓存击穿:当缓存失效时,若有大量请求同时查询数据库,可能会导致数据库崩溃,这是就需要用到分布式锁,确保当缓存失效时,只有一个请求去查询数据库并更新缓存。

Redisson 的分布式可重入锁 RLock 提供了与 java.util.concurrent.locks.Lock 接口类似的操作方式,使用者可以像使用 java 并发包中的 ReentrantLock 一样使用它

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值