Zookeeper Curator 框架实现分布式锁
官方文档:https://curator.apache.org/index.html
依赖
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
<version>4.3.0</version>
</dependency>
案例
package com.syf.case3; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.recipes.locks.InterProcessMutex; import org.apache.curator.retry.ExponentialBackoffRetry; public class CuratorLockTest { public static void main(String[] args) { // 创建分布式锁1 InterProcessMutex lock1 = new InterProcessMutex(getCuratorFramework(), "/locks" ); // 创建分布式锁2 InterProcessMutex lock2 = new InterProcessMutex(getCuratorFramework(), "/locks" ); new Thread( new Runnable() { @Override public void run() { try { lock1.acquire(); System.out.println( "线程1 获取到锁" ); lock1.acquire(); System.out.println( "线程1 再次获取到锁" ); Thread.sleep( 5 * 1000 ); lock1.release(); System.out.println( "线程1 释放锁" ); Thread.sleep( 5 * 1000 ); lock1.release(); System.out.println( "线程1 再次释放锁" ); } catch (Exception e) { e.printStackTrace(); } } }).start(); new Thread( new Runnable() { @Override public void run() { try { lock2.acquire(); System.out.println( "线程2 获取到锁" ); lock2.acquire(); System.out.println( "线程2 再次获取到锁" ); Thread.sleep( 5 * 1000 ); lock2.release(); System.out.println( "线程2 释放锁" ); Thread.sleep( 5 * 1000 ); lock2.release(); System.out.println( "线程2 再次释放锁" ); } catch (Exception e) { e.printStackTrace(); } } }).start(); } private static CuratorFramework getCuratorFramework() { ExponentialBackoffRetry policy = new ExponentialBackoffRetry( 3000 , 3 ); CuratorFramework client = CuratorFrameworkFactory.builder().connectString( "hadoop102:2181,hadoop103:2181,hadoop104:2181" ) .connectionTimeoutMs( 2000 ) .sessionTimeoutMs( 2000 ) .retryPolicy(policy).build(); // 启动客户端 client.start(); System.out.println( "zookeeper 启动成功" ); return client; } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决