【hazelcast入门系列之七】hazelcast的Lock使用

本文介绍hazelcast中Topic的使用。

Lock的基础使用

首先放上基础代码
示例代码
代码主要包含三部分:

  1. hazelcast Lock的基础使用
  2. tryLock处理
  3. 通过Lock来同步多线程操作

第一部分要注意,在 try 外面进行 lock ,然后在finally里面进行解锁,因为没有设置锁失效时间,如果不解锁,会一直锁定。

第二部分加上了锁的最长使用时间,注意不能超过 hazelcast.lock.max.lease.time.seconds 的时间,否则以最长时间为准。

第三部分使用了lock的condition来让消费者、生产者轮流工作,这是一种很有用的调度生产者、消费者的方式。

理解Lock 与map的Lock比较

首先我们来看Lock具有哪些特点:

  1. Lock是可以安全失败的,如果锁对应的节点down掉了,那么对应的锁就会失效,并且可以被别的节点重新建立锁。如果锁对应的节点活着,其他节点down掉了,那么对锁没有影响。
  2. Lock是可重入的,在调用lock()后,还可以再进行若干次lock(),注意解锁的时候也要解锁响应次数。
  3. 在脑裂情况下,认为是两个集群,所以一把锁可以被获取两次,可以通过设置合理的quorum-ref来规避脑裂下锁的分裂。
  4. Lock不会自动移除,所以一定要在finally里面进行unlock,或者设置Lock的失效时间。
  5. IMap也提供了lock支持,但是要注意两者是不一样的。Lock是一个可以单独暴露使用的,但是IMap的lock是需要依赖于map使用的。

ILock哪怕没有被获取也是要占用系统资源的,只有调用destroy()方法才能释放资源,如果使用有限数量的锁,那么是一个好选择。IMap的锁能够进行自动销毁,不获取时不需要占用资源,但同时也说明了只有在锁被某一线程获取的情况下,锁才能被观察到。

Lock的配置项

Lock的脑裂情况可以采取下面这个配置项进行避免。

配置项含义备注
quorum-reflock对应的quorum依赖
通过上面的三个代码例子,希望能够对hazelcast中的Lock有一定的认识。

本文标题:【hazelcast入门系列之七】hazelcast的Lock使用

文章作者:roytrack

发布时间:2019年02月24日 - 15:02

原始链接:http://www.roytrack.com/2019/02/id11/

许可协议: 转载请保留原文链接及作者。