ZK分布式框架Curator
一、导入依赖
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
<version>5.1.0</version>
</dependency>
二、 编码
package com.czm.curator;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.locks.InterProcessMultiLock;
import org.apache.curator.framework.recipes.locks.InterProcessMutex;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.curator.shaded.com.google.common.collect.Interners;
import org.junit.jupiter.api.Test;
import java.util.concurrent.CountDownLatch;
/**
* 使用Curator框架实现ZK分布式锁
*/
public class CuratorTest {
private String connectAddr = "192.168.31.104:2181";
private int timeout = 20000;
private CuratorFramework connect(){
CuratorFramework zkClient = CuratorFrameworkFactory.builder().connectString("192.168.31.104:2181")
.connectionTimeoutMs(20000)
.retryPolicy(new ExponentialBackoffRetry(2000, 3))
.build();
zkClient.start();
return zkClient;
}
@Test
public void main() throws InterruptedException {
InterProcessMutex lock_1 = new InterProcessMutex(connect(), "/zk");
InterProcessMutex lock_2 = new InterProcessMutex(connect(), "/zk");
CountDownLatch latch = new CountDownLatch(2);
Thread thread_1= new Thread(() -> {
try {
lock_1.acquire();
System.out.println("thread1获得锁");
lock_1.acquire();
System.out.println("thread1再次获得锁");
Thread.sleep(5000);
lock_1.release();
System.out.println("thread1释放锁");
lock_1.release();
System.out.println("thread1再次释放锁");
latch.countDown();
} catch (Exception e) {
e.printStackTrace();
}
});
Thread thread_2 = new Thread(() -> {
try {
lock_1.acquire();
System.out.println("thread2获得锁");
lock_1.acquire();
System.out.println("thread2再次获得锁");
Thread.sleep(5000);
lock_1.release();
System.out.println("thread2释放锁");
lock_1.release();
System.out.println("thread2再次释放锁");
latch.countDown();
} catch (Exception e) {
e.printStackTrace();
}
});
thread_1.start();
thread_2.start();
latch.await();
}
}
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。