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 當多個消費者同時收到觸發事件後,為了保證消費的原子性,那麼收到訊息後首先的操作就應該是上鎖,同時上鎖時,只有...