curator读写锁

zookeeper能够实现跨JVM的读写锁,而curator对此提供了API。

读写锁:读写互斥、写写互斥、读读不互斥。

实现类:

InterProcessReadWriteLock
接口类:

InterProcessLock
需要添加依赖

复制代码

org.apache.curator
curator-framework
2.12.0


org.apache.curator
curator-client
2.12.0


org.apache.curator
curator-recipes
2.12.0

复制代码

代码示例:

复制代码
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.locks.InterProcessMutex;
import org.apache.curator.framework.recipes.locks.InterProcessReadWriteLock;
import org.apache.curator.retry.ExponentialBackoffRetry;

/**

  • @author lay

  • @date 2018/09/12 15:20
    */
    public class LocksDemo {

    private static InterProcessMutex readLock;
    private static InterProcessMutex writeLock;

    static {
    CuratorFramework client = CuratorFrameworkFactory.builder().connectString(“127.0.0.1:2181”).retryPolicy(new ExponentialBackoffRetry(3000, 1)).build();
    client.start();
    InterProcessReadWriteLock lock = new InterProcessReadWriteLock(client, “/user”);
    readLock = lock.readLock();
    writeLock = lock.writeLock();
    }

    public static void main(String[] args) throws Exception {
    new Thread(new Runnable() {
    public void run() {
    System.out.println(“线程1启动”);
    try {
    readLock.acquire();
    System.out.println(“获取读锁” + System.currentTimeMillis());
    Thread.sleep(3000);
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    try {
    readLock.release();
    System.out.println(“释放读锁” + System.currentTimeMillis());
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    }).start();
    System.out.println(“主线程休眠2秒”);
    Thread.sleep(2000);
    writeLock.acquire();
    System.out.println(“获取写锁” + System.currentTimeMillis());
    writeLock.release();
    System.out.println(“释放写锁” + System.currentTimeMillis());
    }
    }
    复制代码
    我们先拿到一个framework,然后创建一个InterProcessReadWriteLock,就可以通过它拿到读写锁实例对象了。

在代码中,子线程获取了读锁,然后休眠3秒,而主线程这期间想要获取写锁,就得阻塞等待读锁释放,然后才能获取写锁。

在zookeeper中,其实读写锁是通过创建临时顺序节点来实现的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值