curator对于锁这块做了一些封装,curator提供了InterProcessMutex 这样一个api。除了分布式锁之外,还提供了leader选举、分布式队列等常用的功能。
InterProcessMutex:分布式可重入排它锁
InterProcessSemaphoreMutex:分布式排它锁
InterProcessReadWriteLock:分布式读写锁
public class Demo {
public static void main(String[] args) {
CuratorFramework curatorFramework = null;
curatorFramework=CuratorFrameworkFactory.builder().
connectString(ZkConfig.ZK_CONNECT_STR).sessionTimeoutMs(ZkConfig.ZK_SESSION_TIMEOUT).
retryPolicy(new ExponentialBackoffRetry(1000,10)).build();
curatorFramework.start();
final InterProcessMutex
lock=new
InterProcessMutex(curatorFramework,"/locks");
for(int i=0;i<10;i++){
new Thread(()->{
System.out.println(Thread.currentThread().getName()+"->尝试获取锁");
try {
lock.acquire();
System.out.println(Thread.currentThread().getName()+"->获得锁成功");
} catch (Exception e)
{
e.printStackTrace();
}
try {
Thread.sleep(4000);
lock.release();
System.out.println(Thread.currentThread().getName()+"->释放锁成功");
} catch (Exception e)
{
e.printStackTrace();
}
},"t"+i).start();
}
}
}