91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java如何實現ZooKeeper分布式鎖

發布時間:2022-03-03 13:48:07 來源:億速云 閱讀:148 作者:小新 欄目:開發技術

這篇文章主要介紹了Java如何實現ZooKeeper分布式鎖,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

什么是分布式鎖

1、在我們進行單機應用開發,涉及并發同步的時候,我們往往采用synchronized或者Lock的方式來解決多線程間的代碼同步問題,這時多線程的運行都是在同一個JVM之下,沒有任何問題。

Java如何實現ZooKeeper分布式鎖

2、但當我們的應用是分布式集群工作的情況下,屬于多JVM下的工作環境(多臺機器),跨JVM之間已經無法通過多線程的鎖解決同步問題。那么就需要一種更加高級的鎖機制,來處理種跨機器的進程之間的數據同步問題——這就是分布式鎖。(多節點從分布式組件中獲取鎖)

Java如何實現ZooKeeper分布式鎖

例如以下實例:

Java如何實現ZooKeeper分布式鎖

各種搶票軟件客戶端通過zookeeper獲取鎖,最終只有一個客戶端可以獲得鎖并且先與12306服務器進行數據通信,最終和12306數據庫服務器通行。通信完畢之后釋放鎖,其他客戶端獲取鎖之后執行同樣的操作。(顯然前提是這幾個客戶端都通過負載均衡后均與節點集群中同一個服務器進行通信)

3、其他分布式鎖

Java如何實現ZooKeeper分布式鎖

zookeeper分布式鎖原理

核心思想:當客戶端要獲取鎖,則創建節點,使用完鎖,則刪除該節點。

1、客戶端獲取鎖時,在lock節點下創建臨時順序節點。

2、然后獲取lock下面的所有子節點,客戶端獲取到所有的子節點之后,如果發現自己創建的子節點序號最小,那么就認為該客戶端獲取到了鎖。使用完鎖后,將該節點刪除。

注意:

創建臨時節點的原因:

如果某個已經獲取鎖了的節點發生宕機,如果是持久化節點,那么鎖就無法釋放。如果是臨時節點,在發生宕機后,連接斷開會自動釋放鎖。

創建順序節點的原因:

將節點按順序編號,客戶端通過節點編號判斷自己是否是序號最小的節點,并且獲得鎖。

Java如何實現ZooKeeper分布式鎖

3、如果發現自己創建的節點并非lock所有子節點中最小的,說明自己還沒有獲取到鎖,此時客戶端需要找到比自己小的那個節點,同時對其注冊事件監聽器,監聽刪除事件。

Java如何實現ZooKeeper分布式鎖

4、如果發現比自己小的那個節點被刪除,則客戶端的 Watcher會收到相應通知,此時再次判斷自己創建的節點是否是lock子節點中序號最小的,如果是則獲取到了鎖, 如果不是則重復以上步驟繼續獲取到比自己小的一個節點并注冊監聽。

Java如何實現ZooKeeper分布式鎖

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Java如何實現ZooKeeper分布式鎖”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

裕民县| 长沙县| 呼伦贝尔市| 太仓市| 获嘉县| 旌德县| 宁晋县| 博爱县| 尖扎县| 临猗县| 大姚县| 永吉县| 凤庆县| 永清县| 兴文县| 临朐县| 襄汾县| 宿迁市| 皋兰县| 开封市| 子洲县| 大兴区| 南通市| 湖口县| 正定县| 永济市| 榆社县| 宁河县| 台中县| 攀枝花市| 石泉县| 丹寨县| 淳化县| 九龙县| 布拖县| 甘南县| 大港区| 化州市| 冀州市| 长武县| 石城县|