文档章节

curator 锁之 Shared Reentrant Lock

y
 yiqifendou
发布于 2016/10/08 21:15
字数 806
阅读 22
收藏 0

1、描述
共享锁:全局同步分布式锁,同一时间两台机器只能有一台获得锁

2、参与类
InterProcessMutex

3、用法

3.1 创建

InterProcessMutex 实例

public InterProcessMutex(CuratorFramework client,
                         String path)
Parameters:
client - client
path - the path to lock

3.2 一般用法

用其中一个方法,获取锁

public void acquire()
Acquire the mutex - blocking until it's available. Note: the same thread can call acquire
re-entrantly. Each call to acquire must be balanced by a call to release()

在锁可用之前会获取互斥锁会一直阻塞。注意:同一个线程可用调用 acquire 重新参与争抢锁资源.每次调用都要调 release() 平衡。

public boolean acquire(long time,
                       TimeUnit unit)
Acquire the mutex - blocks until it's available or the given time expires. Note: the same thread can
call acquire re-entrantly. Each call to acquire that returns true must be balanced by a call to release()

Parameters:
time - time to wait
unit - time unit
Returns:
true if the mutex was acquired, false if not

该方法在锁可用或者超时之前会阻塞. 返回 true 表示已获取到锁.
调用 release() 释放互斥体

public void release()
Perform one release of the mutex if the calling thread is the same thread that acquired it. If the
thread had made multiple calls to acquire, the mutex will still be held when this method returns.

如果是执行 acquired 操作的线程调用该方法会释放一个互斥体.但如果一个线程已经多次调用 acquired 操作,那当该方法返回时,互斥体会依然被保留。
NOTE: A InterProcessMutex instance is reusable. i.e. don't create a new instance every time. Re-use a single instance.
注意:InterProcessMutex 实例 是可重用的.不用每次都创建一个新的实例. 重用一个单实例.

4、撤销
InterProcessMutex supports a cooperative revocation mechanism as described on the ZooKeeper recipes wiki
InterProcessMutex支持可协商的撤回机制,正如在 ZK recipes 模块中描述的一样。
调用 makeRevocable 方法撤回互斥体

public void makeRevocable(RevocationListener<T> listener)
Make the lock revocable. Your listener will get called when another process/thread wants you to release the lock. Revocation is cooperative.
Parameters:
listener - the listener

使锁可撤销.当其他进程/线程想让你释放锁时,RevocationListener 监听器会被调用. 撤销是可协商的.
To ask for a lock to revoke/release, use the static method in the Revoker class:
让一个锁撤销/释放,可以使用 Revoker 类中的静态方法

public static void attemptRevoke(CuratorFramework client,
                                 String path)
                         throws Exception
Utility to mark a lock for revocation. Assuming that the lock has been registered
with a RevocationListener, it will get called and the lock should be released. Note,
however, that revocation is cooperative.
Parameters:
client - the client
path - the path of the lock - usually from something like InterProcessMutex.getParticipantNodes()

标记锁撤回的作用.如果锁已经注册了 RevocationListener 监听器,这个方法就会被调用,锁也会被释放. 注意:不管怎样,撤销都是可协商的。

5 错误处理

It is strongly recommended that you add a ConnectionStateListener and watch for SUSPENDED and LOST state changes. If a SUSPENDED state is reported you cannot be certain that you still hold the lock unless you subsequently receive a RECONNECTED state. If a LOST state is reported it is certain that you no longer hold the lock.

强烈推荐使用 ConnectionStateListener 监听器 监视 SUSPENDED and LOST 状态改变. 如果 SUSPENDED 状态被报告 ,你不能确信你依旧拥有这个锁(就是说不确定是不是还持有这把锁)除非你随后收到一个 RECONNECTED 状态. 如果 LOST 状态被报告 那可以确定你已经不再拥有这个锁了.

本文转载自:http://blog.csdn.net/a_fengzi_code_110/article/details/42586645

共有 人打赏支持
y
粉丝 5
博文 51
码字总数 8974
作品 0
南京
分布式利器Zookeeper(三)

前言 《分布式利器Zookeeper(一)》 《分布式利器Zookeeper(二):分布式锁》 本篇博客是分布式利器Zookeeper系列的最后一篇,涉及的话题是:Zookeeper分布式锁的代码实现、zkclient的使用、...

zfz_linux_boy
07/01
0
0
ZooKeeper学习笔记六 ZooKeeper开源客户端Curator

本文学习资源来自《从Paxos到ZooKeeper分布式一致性原理与实践》 Curator Curator是Netflix公司开源的一套ZooKeeper客户端框架,作者是Jordan Zimmerman。 和ZkClient一样,Curator解决了很多...

xundh
04/28
0
0
ZooKeeper典型使用场景

先需要下载 curator 的依赖包 curator-framework curator-recipes Guava-14.0.1 分布式锁 在分布式环境中,为了保证数据的一致性,经常在程序的某个运行点需要进行同步控制。 类是一个同步计...

兔之
2015/10/29
0
0
跟着实例学习ZooKeeper的用法: Curator扩展库

还记得Curator提供哪几个组件吗? 我们不妨回顾一下: Recipes Framework Utilities Client Errors Extensions 前面的例子其实前五个组件都涉及到了, 比如Utilities例子的TestServer, Clien...

longbadx
2015/02/11
0
0
Apache Curator 2.7.1 发布

Apache Curator 2.7.1 发布了,zookeeper 的客户端调用过于复杂,Curator提供了对zookeeper客户端的封装,Apache Curator 就是为了简化zookeeper客户端调用而生,利用它,可以更好的使用zoo...

凯文加内特
2015/03/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

7 个致命的 Linux 命令

导读 如果你是一个 Linux 新手,在好奇心的驱使下,可能会去尝试从各个渠道获得的命令。以下是 7 个致命的 Linux 命令,轻则使你的数据造成丢失,重则使你的系统造成瘫痪,所以,你应当竭力避...

问题终结者
今天
0
0
设计模式:工厂方法模式(工厂模式)

工厂方法模式才是真正的工厂模式,前面讲到的静态工厂模式实际上不能说是一种真正意义上的设计模式,只是一种变成习惯。 工厂方法的类图: 这里面涉及到四个种类: 1、抽象产品: Product 2、...

京一
今天
0
0
区块链和数据库,技术到底有何区别?

关于数据库和区块链,总会有很多的困惑。区块链其实是一种数据库,因为他是数字账本,并且在区块的数据结构上存储信息。数据库中存储信息的结构被称为表格。但是,区块链是数据库,数据库可不...

HiBlock
今天
0
0
react native 开发碰到的问题

react-navigation v2 问题 问题: static navigationOptions = ({navigation, navigationOptions}) => ({ headerTitle: ( <Text style={{color:"#fff"}}>我的</Text> ), headerRight: ( <View......

罗培海
今天
0
0
Mac Docker安装流程

久仰Docker大名已久,于是今天趁着有空,尝试了一下Docker 先是从docker的官网上下载下来mac版本的docker安装包,安装很简易,就直接拖图标就好了。 https://www.docker.com/products/docker...

writeademo
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部