Java分布式锁面试题

本文探讨了在多服务器环境下为何需要分布式锁,并详细解析了Redis分布式锁的实现,包括Redis setnx、setnx expire以及RedissonLock和RedLock的工作原理。文章分析了各种方案的优缺点,并给出了在不同业务场景下的选择建议。
摘要由CSDN通过智能技术生成

1.为什么需要分布式锁?

public synchronized void test() {
    System.out.println("获取到锁");
}
public void test2() {
     synchronized (Test.class) {
          System.out.println("获取到锁");
     }
}

假设我们把上述代码部署到多台服务器上,这个互斥锁还能生效吗?答案是否定的,这时分布式锁应运而生。

2.Redis分布式锁?

接下来我给大家讲解完整的演变过程,让大家更深刻的理解分布式锁。

Redis setnx

线程1申请加锁,这时没有人持有锁,加锁成功:

127.0.0.1:6379> setnx lock 1
(integer) 1

线程2申请加锁,此时发现有人持有锁未释放,加锁失败:

127.0.0.1:6379> setnx lock 1
(integer) 0

线程1执行完成业务逻辑后,执行DEL命令释放锁:

127.0.0.1:6379> del lock
(integer) 1

存在问题:

①假设线程1执行到一半,系统挂了,这时锁还没释放,就会造成死锁。

②如果Re

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值