【hazelcast入门系列之九】hazelcast 的 ISemaphore 使用

本文介绍 hazelcast 中 ISemaphore 的使用。

ISemaphore 的基础使用

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

  1. hazelcast ISemaphore 的配置
  2. 通过 semaphore 对多线程操作资源进行限制

ISemaphore 与 jdk 中的 Semaphore 功能一样,限制线程或者方法对同一资源的访问数量。每次在获取共享资源之前,先获取授权。
与锁不同的是 semaphore 可以有多个授权,并且线程可以主动释放资源。
如果可以获得授权,那么就可以访问资源了,如果不能获得,则等待其他线程的授权释放。

通过第一部分,我们可以看到对 ISemaphore 的配置。可以配置对应semaphore的名字,同步备份个数,初始大小,还有脑裂判断quorum的依赖名称。
hazelcast 提供了对 ISemaphore 的备份,如果一个成员 down 掉,其他成员可以接管 semaphore 和对应授权信息,注意如果 semaphore 所在的成员 down
掉,那么对应的授权都会释放。为了保证 semaphore 的高可用,可以设置对应的参数:

  • backup-count 同步备份个数
  • async-backup-count 异步备份个数

默认 hazelcast 对同步备份是启用的,默认备份1个。

第二部分是一个多线程同时对 IAtomicLong 进行加,睡一秒后进行减。运行可以观察到始终不会超过2。因为最多只有三个线程可以操作 IAtomicLong,虽然有五个线程在执行。

脑裂保护

脑裂保护可以分为写、读写、读三类操作的保护。
ISemaphore 的脑裂情况可以采取下面这个配置项进行避免。

配置项 含义 备注
quorum-ref ISemaphore

通过上面的两个代码例子,希望能够对 hazelcast 中的 ISemaphore 有一定的认识。

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

文章作者:roytrack

发布时间:2019年03月05日 - 20:03

原始链接:http://www.roytrack.com/2019/03/id13/

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