Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hazelcast-将锁键与地图值关联以进行锁监控的策略/算法?_Java_Locking_Distributed Computing_Hazelcast_Hazelcast Imap - Fatal编程技术网

Java Hazelcast-将锁键与地图值关联以进行锁监控的策略/算法?

Java Hazelcast-将锁键与地图值关联以进行锁监控的策略/算法?,java,locking,distributed-computing,hazelcast,hazelcast-imap,Java,Locking,Distributed Computing,Hazelcast,Hazelcast Imap,我有一个要求,即我无法找到使用hazelcast IMap和ILock构造的解决方案 我需要跟踪通过分布式映射获得的所有锁(成功调用IMap.tryLock(K key)后获得的锁)。 每个成功获取的锁必须与地图中的自定义对象关联/配对以进行跟踪。(这些自定义对象包含特定于应用程序的锁柜信息,用于监视。) 我想要的是,当成功获取锁时,与锁相关联的自定义对象必须自动以原子方式放到映射中。 当释放锁时,必须自动逐出与锁相关联的自定义对象 换句话说,我想正确地跟踪所有未释放锁的锁柜信息 我的第一次尝试

我有一个要求,即我无法找到使用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);
            }
        }
显然,这种方法容易出错,因为锁获取/释放操作和后续的映射put(在示例代码putLockInfoToMapAfterLockAcquire方法中)/remove(在示例代码removeLockInfoAfterUnlockSuccess方法中)操作不是原子的

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

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


感谢您提供任何指导。在API级别上,没有直接支持遍历或获取从Imap接口获得的锁的信息。因此,我认为您自己这样做是正确的。对于同步锁信息和锁,您可以使用