美文网首页
zk-curator框架-分布式锁/分布式读写锁

zk-curator框架-分布式锁/分布式读写锁

作者: Wannay | 来源:发表于2021-04-06 22:57 被阅读0次

1.创建连接对象

        String connectString = "localhost:2181,localhost:2182,localhost:2183";  //connectString
        CuratorFramework client = CuratorFrameworkFactory.builder()
                .connectString(connectString)  //connectString
                .sessionTimeoutMs(5000)   //sessionTimeout
                .retryPolicy(new RetryOneTime(3000))  //retryPolicy->retry one times after 3000ms
                .build();
        client.start();  //开始连接

2. 分布式普通锁

        //第一个参数指明client,第二个参数指明锁的路径
        InterProcessLock lock = new InterProcessMutex(client, "/wanna");
        lock.acquire();
        for (int i = 0; i < 10; i++) {
            TimeUnit.SECONDS.sleep(3);
            System.out.println(i);
        }
        lock.release();

启动两个进程,我们发现只有当进程1执行完,才能轮到进程2执行。当进程1被强制关闭(宕机),过了一定时间之后进程2也能执行,因此我们可以发现这个锁很智能,不会产生死锁,宕机会自动释放掉锁

3. 分布式读写锁

        //第一个参数指定client,第二个参数指定路径path
        InterProcessReadWriteLock lock = new InterProcessReadWriteLock(client, "/wanna");
        final InterProcessMutex readLock = lock.readLock();  //获取读锁对象
        final InterProcessMutex writeLock = lock.writeLock();  //获取写锁对象
        //模拟写进程
        new Thread(() -> {
            System.out.println("Write thread is running");
            try {
                writeLock.acquire();  //加上写锁
                for (int i = 0; i < 10; i++) {
                    System.out.println("write-" + i);
                    TimeUnit.SECONDS.sleep(2);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    //释放写锁
                    writeLock.release();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
        //模拟读进程
        new Thread(() -> {
            System.out.println("Read thread is running");
            try {
                //加上读锁
                readLock.acquire();
                for (int i = 0; i < 10; i++) {
                    System.out.println("read-" + i);
                    TimeUnit.SECONDS.sleep(2);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    //释放读锁
                    readLock.release();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();

如果先获得了读锁,那么就得先把读进程执行完才能执行写进程,如果先获得了写锁,那么就得先把写进程执行完才能执行读进程,和单机版的JUC下的读写锁类似

相关文章

  • zk-curator框架-分布式锁/分布式读写锁

    1.创建连接对象 2. 分布式普通锁 启动两个进程,我们发现只有当进程1执行完,才能轮到进程2执行。当进程1被强制...

  • Java-分布式框架-redis-4

    redis分布式锁redisson 分布式框架中,普通锁是满足不了业务需求的,分布式锁在分布式框架中不可缺失;比如...

  • 分布式锁

    为什么要用分布式锁 数据库乐观锁redis分布式锁zookeeper分布式锁 使用分布式锁的场景 实现分布式锁的方...

  • (3)Zookeeper分布式锁实现原理

    本文基于Curator开源框架,建议用封装好分布式锁实现,快捷省事儿 两个客户端争抢zk分布式锁(zk锁,锁zk节...

  • 分布式框架

    分布式框架思考 分布式框架需要考虑的问题:分布式锁、分布式事务、分布式存储、分布式调度、分布式计算、容器部署(通信...

  • 什么是分布式锁?几种分布式锁分别是怎么实现的?

    一、什么是分布式锁: 1、什么是分布式锁: 分布式锁,即分布式系统中的锁。在单体应用中我们通过锁解决的是控制共享资...

  • 4:Redis 分布式锁 (文末有项目连接)

    1:什么是缓存分布式锁 2:分布式锁的关键代码 3:业务代码使用分布式缓存锁 4:业务代码使用分布式缓存锁 5:测...

  • 分布式锁可以这么简单?

    本文只讨论如何基于已实现了分布式锁的第三方框架进行二次封装,减少分布式锁的使用成本,而且当需要替换分布式锁实现时,...

  • AbstractQueuedSynchronizer

    理解多线程的并发锁,可结合多进程的分布式锁(如Zookeeper的互斥锁、读写锁的实现原理),本质是相通的 介绍 ...

  • 锁(2)-- 分布式锁

    前言: 锁分3种:java锁、分布式锁、DB锁 分布式锁的几种实现方式 目前几乎很多大型网站及应用都是分布式部署...

网友评论

      本文标题:zk-curator框架-分布式锁/分布式读写锁

      本文链接:https://www.haomeiwen.com/subject/mstykltx.html