我有一个要求,我找不到使用榛树IMap和ILock结构的解决方案。Hazelcast - 将锁键与地图值关联以进行锁定监视的策略/算法?
我需要跟踪通过分布式映射获取的所有锁定(在成功完成IMap.tryLock(K键)调用后获取的锁定)。 每个成功获取的锁都必须与地图中的自定义对象关联/配对以进行跟踪。 (这些自定义对象包含用于监视目的的特定于应用程序的更衣室信息。) 我想要的是,当成功获取锁定时,与锁有关的相关自定义对象必须以自动方式自动放置到地图。 并且当锁被释放时,与锁相关的相关自定义对象必须自动被原子驱逐。
换句话说,我想跟踪所有未发布的锁的锁柜信息是否正确。
我第一次尝试/趋势是实现锁定工具方法如下图所示:
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方法)/ remove(在示例代码中removeLockInfoAfterUnlockSuccess方法)操作不是原子化的...
我找不出使用hazelcast并发构造的解决方案。
什么是保持锁相关信息并确保它们与锁同步的正确方法?以前没有人有类似的要求吗?
任何指导表示赞赏