引入jar包
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.0</version>
</dependency>
实现代码
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;
import java.util.concurrent.CountDownLatch;
public class ZookeeperMain {
public static final String ZK_CONNECTION = "127.0.0.1:2181";
public static void main(String[] args) throws Exception{
CuratorFramework curatorFramework = CuratorFrameworkFactory.builder().
connectString(ZK_CONNECTION).sessionTimeoutMs(50000000).
retryPolicy(new ExponentialBackoffRetry(1000, 3)).build();
curatorFramework.start();
final InterProcessMutex lock = new InterProcessMutex(curatorFramework, "/locks");
int count = 10 ;
CountDownLatch latch = new CountDownLatch(count);
for (int i = 0; i < count; i++) {
new Thread(() -> {
System.out.println(Thread.currentThread().getName() + "->尝试竞争锁");
try {
lock.acquire();
System.out.println(Thread.currentThread().getName() + "->成功获得了锁");
Thread.sleep( 40000 );
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
latch.countDown();
lock.release();
} catch (Exception e) {
}
}
}, "Thread-" + i).start();
}
latch.await();
curatorFramework.close();
}
}