我有一個要求,我找不到使用榛樹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併發構造的解決方案。
什麼是保持鎖相關信息並確保它們與鎖同步的正確方法?以前沒有人有類似的要求嗎?
任何指導表示讚賞