<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ZooKeeper 分布式鎖 Curator 源碼 02:可重入鎖重復加鎖和鎖釋放

          共 915字,需瀏覽 2分鐘

           ·

          2021-07-12 06:50

          前言

          加鎖邏輯已經(jīng)介紹完畢,那當一個線程重復加鎖是如何處理的呢?

          1

          鎖重入

          在上一小節(jié)中,可以看到加鎖的過程,再回頭看 internalLock 這個方法。

          加鎖成功之后,將當前線程放到 threadData 中,threadData 是 ConcurrentMap<Thread, LockData> 類型的,不用擔心并發(fā)問題。

          假如鎖重入了,直接就會在上一部分 lockData != null 被攔下,然后執(zhí)行 lockData.lockCount.incrementAndGet();

          對 lockCount 自增,代表了鎖重入。

          這里發(fā)現(xiàn)了吧!Curator 的鎖重入是在 Java 代碼中實現(xiàn)的

          2

          鎖釋放

          當鎖需要釋放的時候,只需要調(diào)用 lock.release() 進行釋放即可,具體是如何釋放的呢?

          主要分為兩部分:

          1. 遞減 threadData 中當前線程的加鎖次數(shù);
          2. 加鎖次數(shù)大于 0,說明還剩余重入次數(shù),直接返回;
          3. 加鎖次數(shù)等于 0,則 releaseLock 釋放鎖,并刪除 threadData 中當前線程 key。

          releaseLock 方法中就沒有多少復雜邏輯了,就是移除監(jiān)聽器,刪除臨時順序節(jié)點。也就是 /locks/lock_01/_c_e855d232-c636-4241-bf8e-f047939a5833-lock-0000000001

          3

          總結

          ZooKeeper 的 InterProcessMutex 鎖是通過 Java 代碼中維護了一個 lockCount 來判斷是否重入的。


          - <End /> -




          歷史文章 | 相關推薦



          瀏覽 56
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  水蜜桃视频入口 | 人妻第一页大香蕉 | 久久久夜色精品亚洲在线播放 | 豆花成人无码视频在线 | AAA久久久|