ZooKeeper实现分布式锁,相较于redis来解决分布式锁会更稳定,但在性能上比不过redis解决分布式锁,但也会比原生mysql解决解决分布式锁的性能好。
在Curator中有五种锁方案:
- InterProcessSemaphoreMutex:分布式排它锁(非可重入锁)
- InterProcessMutex:分布式可重入排它锁
- InterProcessReadWriteLock:分布式读写锁
- InterProcessMultiLock:将多个锁作为单个实体管理的容器
- InterProcessSemaphoreV2:共享信号量
这里使用可重入锁举例
先创建
private InterProcessMutex lock;
通过InterProcessMutex类创建了一个名为lock的分布式锁对象,该锁对象将会在ZooKeeper的/lock路径下进行锁操作。
lock = new InterProcessMutex(client,"/lock");
使用方法与JUC类似
获取锁,在3秒内获取不到锁就返回布尔值false
lock.acquire(3, TimeUnit.SECONDS);
释放锁
lock.release();


