四、原始碼
public inte***ce lock
public abstract class zookeeperabstractlock implements lock else
}//獲取鎖資源
abstract boolean trylock();
//等待
abstract void waitlock();
}
基於zk異常的實現public class zookeeperdistributelock extends zookeeperabstractlock catch (exception e)
}@override
void waitlock()
public void handledatadeleted(string datapath) throws exception }};
//註冊事件
zkclient.subscribedatachanges(path, listener);
if (zkclient.exists(path)) catch (exception e)
}//刪除監聽
zkclient.unsubscribedatachanges(path, listener);
}public void unlock()
}}
基於監聽的實現public class zookeeperdistributelistenlock extends zookeeperabstractlock
}@override
boolean trylock()
//獲取所有臨時節點並且排序
listchildrens = zkclient.getchildren(path2);
collections.sort(childrens);
//如果自己是第乙個節點,那麼就認為自己獲取到鎖了
if (currentpath.equals(path2 + '/' + childrens.get(0))) else
return false;
}@override
void waitlock()
public void handledatadeleted(string datapath) throws exception }};
//監聽前面乙個節點是否被刪除,前面節點一旦被刪除,自己就有機會獲取鎖了
zkclient.subscribedatachanges(beforepath, listener);
if (zkclient.exists(beforepath)) catch (exception e)
}//刪除監聽
zkclient.unsubscribedatachanges(beforepath, listener);
}public void unlock()
}}
zk實現分布式鎖
前言 2016春節之後一直比較忙,因此部落格n個沒有更新,現在也是忙裡偷閒,偷偷的更新一篇!一 分布式鎖介紹 分布式鎖主要用於在分布式環境中保護跨程序 跨主機 跨網路的共享資源實現互斥訪問,以達到保證資料的一致性。二 架構介紹 在介紹使用zookeeper實現分布式鎖之前,首先看當前的系統架構圖 解...
ZK分布式鎖
分布式鎖是控制分布式系統之間同步訪問共享資源的一種方式。如果不同的系統或者是同乙個系統的不同主機之間共享了乙個或者一組資源,那麼訪問這些資源的時候,往往需要一些互斥手段來防止彼此之間的干擾,以保證一致性,在這種情況下,就需要分布式鎖了 zookeeper中有一種節點叫做順序節點,假如我們在 lock...
zk分布式鎖
zk 分布式鎖,其實可以做的比較簡單,就是某個節點嘗試建立臨時 znode,此時建立成功了就獲取了這個鎖 這個時候別的客戶端來建立鎖會失敗,只能註冊個 監聽這個鎖。釋放鎖就是刪除這個 znode,一旦釋放掉就會通知客戶端,然後有乙個等待著的客戶端就可以再次重新加鎖。zookeepersession ...