使用ZooKeeper实现Java跨JVM的分布式锁(读写锁)
来源:互联网 发布:鹏博士收购中信网络 编辑:程序博客网 时间:2024/06/01 08:22
一、使用ZooKeeper实现Java跨JVM的分布式锁
二、使用ZooKeeper实现Java跨JVM的分布式锁(优化构思)
三、使用ZooKeeper实现Java跨JVM的分布式锁(读写锁)
读写锁:
本文在前面俩片的基础之上介绍如何 使用ZooKeeper实现Java跨JVM的分布式锁(读写锁)。
简单介绍一下读写锁,在使用读写锁时, 多个客户端(线程)可以同时获取 “读锁”, 但是“写入锁”是排它的,只能单独获取。
1、假设A,B线程获取到 “读锁”, 这时C线程就不能获取 “写锁”。
2、假设C线程获取了“写锁”,那么A,B线程就不能获取“读锁”。
这在某种情况下会大幅度提高系统的性能,在单JVM进程内 Java已经提供了这种锁的机制,可以参考ReentrantReadWriteLock这个类。
基于ZK的分布式读写锁:
本文主要介绍ZK的分布式读写锁,还是基于Curator客户端实现。
实现原理:
实现原理与之前介绍的锁的原理基本类似,这里主要说明一下不同之处。
1、写入锁在申请锁时写入的节点名称是这样的 xxxx-__WRIT__00000000xxx 例如: _c_9b6e456b-94fe-47e7-b968-34027c094b7d-__WRIT__0000000006
2、读取锁在申请锁时写入的节点名称是这样的 xxxx-__READ__00000000xxx 例如: _c_9b6e456b90-9c33-6294665cf525--b6448-__READ__0000000005
区别就是写入锁的字符串包含WRIT,读取所包含READ
获取锁的区别:
1、写入锁在获取锁时的处理与前面文章介绍的原理一直,就是判断自己前面还有没有节点,如果没有就可以获取到锁,如果有就等待前面的节点释放锁。
2、读取锁在获取锁时的处理是,判断自己前面还有没有写入锁的节点,也就是前面的节点是否包含WRIT,如果有那么等待前面的节点释放锁。
读取所自己前面有 其它 读取锁节点 无所谓,它仍然可以获取到锁,这也就是读取所可以多客户端共享的原因。
- 使用ZooKeeper实现Java跨JVM的分布式锁(读写锁)
- 使用ZooKeeper实现Java跨JVM的分布式锁(读写锁)
- 使用ZooKeeper实现Java跨JVM的分布式锁
- 使用ZooKeeper实现Java跨JVM的分布式锁
- 使用ZooKeeper实现Java跨JVM的分布式锁
- 使用ZooKeeper实现Java跨JVM的分布式锁(优化构思)
- 使用ZooKeeper实现Java跨JVM的分布式锁(优化构思)
- 基于zookeeper实现的分布式读写锁
- java使用zookeeper实现的分布式锁示例
- 使用 ZooKeeper 实现分布式锁
- 使用zookeeper实现分布式锁
- 使用Zookeeper实现分布式锁
- 使用zookeeper实现分布式锁
- 使用zookeeper实现分布式锁
- 使用Zookeeper实现分布式锁
- 使用zookeeper实现分布式共享锁
- 使用zookeeper实现分布式共享锁
- 使用redis和zookeeper实现分布式锁
- bzoj 4443: [Scoi2015]小凸玩矩阵
- leetcode2
- 51node 1351 吃点心
- 10月7日 c语言 输入一串字符,单词之间用空格隔开,统计其中有多少个单词
- 《Python学习手册》学习笔记(18)之第18章参数(关键词:编程语言/Python/参数)
- 使用ZooKeeper实现Java跨JVM的分布式锁(读写锁)
- hdu1213 How Many Tables
- Gym
- 《Python学习手册》学习笔记(19)之第19章函数的高级话题(关键词:编程语言/Python/递归函数/匿名函数)
- Qt 学习之路 2(75):线程总结
- Linux 日志系统组成详解
- vultr 安装centos7 和shadowsocks的问题
- 《Python学习手册》学习笔记(19)之第19章函数的高级话题(关键词:编程语言/Python/函数/递归函数/匿名函数)
- IO Streams:缓冲流