1.pom依赖:
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.5.0</version>
</dependency>
2.重入锁demo:
package lock;
import java.util.concurrent.Semaphore;
import org.apache.curator.RetryPolicy;
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 CuratorDistributeLockTest {
private int i = 1;
public void increace() {
System.out.println(i++);
}
public static void main(String[] args) {
String zkAddr = "192.168.1.202:2181";
String lockPath = "/distribute-lock";
RetryPolicy retryPolicy = new ExponentialBackoffRetry(10000, 0);
CuratorFramework cf = CuratorFrameworkFactory.builder()
.connectString(zkAddr)
.sessionTimeoutMs(2000)
.retryPolicy(retryPolicy)
.build();
cf.start();
final CuratorDistributeLockTest test = new CuratorDistributeLockTest();
final InterProcessMutex lock = new InterProcessMutex(cf, lockPath);
Runnable runnable = new Runnable() {
public void run() {
try {
long start = System.currentTimeMillis();
lock.acquire();
Thread.sleep(1000);
test.increace();
//System.out.println("持续时间:"+(System.currentTimeMillis() - start));
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
lock.release();
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
for (int i = 0; i < 50; i++) {
Thread t = new Thread(runnable);
t.start();
}
}
}
curator中还实现了多线程中其他的锁,如InterProcessReadWriteLock(读写锁)