Java Hazelcast-将锁键与地图值关联以进行锁监控的策略/算法?
我有一个要求,即我无法找到使用hazelcast IMap和ILock构造的解决方案 我需要跟踪通过分布式映射获得的所有锁(成功调用IMap.tryLock(K key)后获得的锁)。 每个成功获取的锁必须与地图中的自定义对象关联/配对以进行跟踪。(这些自定义对象包含特定于应用程序的锁柜信息,用于监视。) 我想要的是,当成功获取锁时,与锁相关联的自定义对象必须自动以原子方式放到映射中。 当释放锁时,必须自动逐出与锁相关联的自定义对象 换句话说,我想正确地跟踪所有未释放锁的锁柜信息 我的第一次尝试/倾向是实现锁实用程序方法,如下所示:Java Hazelcast-将锁键与地图值关联以进行锁监控的策略/算法?,java,locking,distributed-computing,hazelcast,hazelcast-imap,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);
}
}
显然,这种方法容易出错,因为锁获取/释放操作和后续的映射put(在示例代码putLockInfoToMapAfterLockAcquire方法中)/remove(在示例代码removeLockInfoAfterUnlockSuccess方法中)操作不是原子的
我无法找到使用hazelcast并发构造的解决方案
保存锁相关信息并确保它们与锁同步的正确方法是什么?以前没有人有类似的要求吗
感谢您提供任何指导。在API级别上,没有直接支持遍历或获取从Imap接口获得的锁的信息。因此,我认为您自己这样做是正确的。对于同步锁信息和锁,您可以使用