java - Hazelcast - 将锁键与映射值关联以进行锁监控的策略/算法?

标签 java locking distributed-computing hazelcast hazelcast-imap

我有一个要求,即无法使用 hazelcast IMap 和 ILock 构造找到解决方案。

我需要跟踪通过分布式映射获取的所有锁(成功调用 IMap.tryLock(K key) 后获取的锁)。 每个成功获取的锁都必须与映射中的自定义对象关联/配对以进行跟踪。 (这些自定义对象包含用于监控目的的应用程序特定的储物柜信息。) 我想要的是,当成功获取锁时,与锁相关的关联自定义对象必须自动自动放入映射中。 并且当锁被释放时,与锁相关的关联自定义对象必须自动被原子地逐出。

换句话说,我想正确跟踪所有未释放锁的储物柜信息。

我的第一次尝试/倾向是实现如下所示的锁定实用程序方法:

public boolean tryLockUtilMethod(String key, long maxTimeToWaitForTheLockInMilis) {
        boolean isLockAcquired = false;
        try {
            isLockAcquired = IMap.tryLock(key, maxTimeToWaitForTheLockInMilis, TimeUnit.MILLISECONDS);
        } catch (Exception e) {
            ...
        }

        if (isLockAcquired) {
            putLockInfoToMapAfterLockAcquire(key);

        }
    }

解锁实用方法如下:

public void unlockUtilMethod(String key) {

            boolean isUnlockSuccess = false;

            try {
                IMap.unlock(key);
                isUnlockSuccess = true;
            } catch (IllegalMonitorStateException e) {
                // current thread does not hold the lock
                ...
            } catch (Exception ex) {
                ...
            }

            if (isUnlockSuccess) {
                removeLockInfoAfterUnlockSuccess(key);
            }
        }

显然这种方法很容易出错,因为锁获取/释放操作和后续的映射放置(在示例代码 putLockInfoToMapAfterLockAcquire 方法中)/删除(在示例代码 removeLockInfoAfterUnlockSuccess 方法中)操作不是原子操作...

我无法找到使用 hazelcast 并发构造的解决方案。

保存锁相关信息并确保它们与锁同步的正确方法是什么?以前没有人有过类似的需求吗?

感谢任何指导

最佳答案

据我所知,API级别没有直接支持遍历或获取有关从Imap接口(interface)获得的锁的信息。所以我认为你自己做的方法是正确的。对于同步锁定信息和锁定,您可以使用 hazelcast transactions.

关于java - Hazelcast - 将锁键与映射值关联以进行锁监控的策略/算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43282103/

相关文章:

java - 使用 SimpleDateFormat 在 Android 中解析长日期

java - 使用通用类型参数转换异常 : Right way to do it?

MySQL InnoDB : Difference Between `FOR UPDATE` and `LOCK IN SHARE MODE`

c# - 加载外部 app.config 会锁定它吗?

mysql - 来自 vbscript 的表更新锁定

java - 当客户端代码运行在多台机器上时,如何保证服务调用的上限?

apache-spark - 在 DataFrame 联合之后管理 Spark 分区

rabbitmq - 使用 RabbitMQ 进行分布式通信和处理

java - 我的项目中缺少什么注释?

java - jsp 无法解析 fmt :formatDate when it inside spring form:input