非分布式鎖的簡易使用

2021-09-27 11:18:11 字數 1126 閱讀 7454

1 lock鎖的設計

/*** 全域性的鎖

*/public class lockhelper }

/*** 儲存了所有的鎖

*/private static final maplocks = new hashmap<>();

/*** 加鎖時間,防止死鎖

*/private static final maplocktimemap = new hashmap<>();

/*** 如果時長超過兩分鐘,就去給它解鎖

* todo:這個方法應該放到定時任務,至於怎麼繼承,就看使用定時任務的人怎麼用了

*/public void run(string args) 兩分鐘都還沒有釋放,可能死鎖了", locktype);

lockhelper.unlock(locktype); }

}); }

/*** 加鎖(不帶時間,run()方法定時釋放鎖,避免死鎖)

*/public static void lock(locktype locktype)

/*** 加鎖(不帶時間,run()方法定時釋放鎖,避免死鎖)

*/public static boolean trylock(locktype locktype)

return result; }

/*** 加鎖(帶時間,run()方法定時釋放鎖,避免死鎖)

*/public static boolean trylock(locktype locktype, long time, timeunit unit) throws interruptedexception

return result; }

/*** 釋放鎖(不帶時間,需要手動釋放,可能會造成死鎖)

*/public static void unlock(locktype locktype) }

2 使用

@test

public void testlockhelper() throws interruptedexception

@test

public void testsynchronized() throws interruptedexception }

分布式鎖 使用Redis實現分布式鎖

關於分布式鎖的實現,我的前一篇文章講解了如何使用zookeeper實現分布式鎖。關於分布式鎖的背景此處不再做贅述,我們直接討論下如何使用redis實現分布式鎖。關於redis,筆主不打算做長篇大論的介紹,只介紹下redis優秀的特性。支援豐富的資料型別,如string list map set zs...

分布式 分布式鎖

本質是利用redis的setnx 方法的特性來加鎖,setnx 即key不存在則設定key,否則直接返回false,要求在分布式系統中使用同乙個redis服務,以下提供兩種解決方案 1 直接使用redistemplate 這其實並不能完全保證高併發下的安全問題,因為可能在鎖過期之後該執行緒尚未執行完...

redis分布式鎖(簡易版)

上一章介紹了redis鍵失效後觸發的事件,本章寫到如何做乙個簡單的redis分布式鎖 當多人同時對一條redis記憶體資料進行操作時上鎖,首先保證只有乙個人能消費,其次保證不會被重複消費 1 當多個消費者同時收到觸發事件後,為了保證消費的原子性,那麼收到訊息後首先的操作就應該是上鎖,同時上鎖時,只有...