curator分布式锁

1、添加curator依赖


    
        org.apache.curator
        curator-recipes
        4.0.1
    

2、代码编写

package com.cn.willy.com.cn.curator.willy;

import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.locks.InterProcessLock;
import org.apache.curator.framework.recipes.locks.InterProcessMutex;
import org.apache.curator.framework.recipes.locks.InterProcessReadWriteLock;
import org.apache.curator.retry.RetryOneTime;

import java.util.concurrent.TimeUnit;

public class CuratorLock {

private static CuratorFramework client = null;

/**
 * 分布式锁
 */
public static void interProcessLock(){
    InterProcessLock lock = new InterProcessMutex(client,"/node");
    try{
        lock.acquire();
        //模拟业务处理
        for(int i =0 ; i <= 10; i++){
            TimeUnit.SECONDS.sleep(2);
            System.out.println(i);
        }
    }catch (Exception e){
        e.printStackTrace();
    }finally {
        try {
            lock.release();
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }
}

/**
 * 写锁
 */
public  static void writeLock(){
    InterProcessReadWriteLock readWriteLock = new InterProcessReadWriteLock(client,"/node");
    InterProcessLock lock = readWriteLock.writeLock();
    try{
        lock.acquire();
        //模拟业务处理
        for(int i =0 ; i <= 10; i++){
            TimeUnit.SECONDS.sleep(2);
            System.out.println(i);
        }
    }catch (Exception e){
        e.printStackTrace();
    }finally {
        try{
            lock.release();
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }
}

/**
 * 读锁
 */
public  static void readLock(){
    InterProcessReadWriteLock readWriteLock = new InterProcessReadWriteLock(client,"/node");
    InterProcessLock lock = readWriteLock.readLock();
    try{
        lock.acquire();
        //模拟业务处理
        for(int i =0 ; i <= 10; i++){
            TimeUnit.SECONDS.sleep(2);
            System.out.println(i);
        }
    }catch (Exception e){
        e.printStackTrace();
    }finally {
        try{
            lock.release();
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }
}


/**
 * 获取zookeeper连接
 */
public  static  void connection(){
    try{
        client = CuratorFrameworkFactory.builder()
                .connectString("192.168.43.135:2181")
                .connectionTimeoutMs(5000)
                .retryPolicy(new RetryOneTime(300))
                .namespace("lock")
                .build();

        client.start();
    }catch (Exception e){
        e.printStackTrace();
    }
}

/**
 * 关闭zookeeper连接
 */
public static void close(){
    try {
        client.close();
    }catch (Exception e){
        e.printStackTrace();
    }
}
}

注意:curator中读写互斥

你可能感兴趣的:(curator实现分布式锁,zookeeper)