当前位置:   article > 正文

Java分布式锁面试题

java分布式锁面试题

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

  1. public synchronized void test() {
  2. System.out.println("获取到锁");
  3. }
  4. public void test2() {
  5. synchronized (Test.class) {
  6. System.out.println("获取到锁");
  7. }
  8. }

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

2.Redis分布式锁

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

Redis setnx

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

  1. 127.0.0.1:6379> setnx lock 1
  2. (integer) 1

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

  1. 127.0.0.1:6379> setnx lock 1
  2. (integer) 0

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

  1. 127.0.0.1:6379> del lock
  2. (integer) 1

存在问题:

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

②如果Re

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/1003704
推荐阅读
相关标签
  

闽ICP备14008679号