Java本地锁在分布式下存在的问题

本地锁的问题

现象:本地锁在多节点下失效(集群分布式)

原因:本地锁它只能锁住本地JVM进程中的多个线程,对于多个JVM进程的不同线程间是锁不住的

怎么办?

我们需要一种分布式锁,期望能在分布式环境下提供锁服务,并且达到本地锁的效果:不仅能锁住同一jvm进程下的不同线程,更要能锁住不同vm进程下的不同线程

为什么需要分布式锁:

  1. 为了效率:防止不同节点之间做相同的事情,浪费资源 (定时任务)
  2. 为了安全:有些事情在同一时间只允许一个线程去做

分布式锁的特点:

  1. 互斥性:不仅要在同一jvm进程下的不同线程间互斥, 更要在不同jvm进程下的不同线程间互斥
  2. 锁超时:支持锁的自动释放,防止死锁
  3. 正确,高效,高可用:解铃还须系铃人(加锁和解锁必须是同一个线程),加锁和解锁操作一定要高效,提供锁的服务要具备容错性
  4. 可重入:如果一个线程拿到了锁之后继续去获取锁还能获取到,我们称锁是可重入的方法的递归调用)
  5. 阻塞/非阻塞:如果获取不到直接返回视为非阻塞的,如果获取不到会等待锁的释放直到获取锁或者等待超时,视为阻塞的
  6. 公平/非公平:按照请求的顺序获取锁视为公平的

Java本地锁在分布式下存在的问题
https://maojun.xyz/blog/2023/11/Java本地锁在分布式下存在的问题.html
作者
毛 俊
发布于
2023年11月4日
许可协议