共計 1978 個字符,預計需要花費 5 分鐘才能閱讀完成。
這篇文章主要介紹“ZooKeeper 共享鎖怎么創建”,在日常操作中,相信很多人在 ZooKeeper 共享鎖怎么創建問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ZooKeeper 共享鎖怎么創建”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!
眾所周知,在 Java 開發中,要創建一個單進程鎖非常簡單,使用 JDK 中自帶的 java.util.concurrent.locks.Lock 接口即可實現鎖的功能。
如今已經到了大數據、云的時代,而這種鎖已經無法滿足集群服務間鎖的需求了,本文將簡單說下如何使用 ZooKeeper 來實現共享鎖功能。至于什么是共享鎖呢?理解起來也很簡單:就是指在多個實例中使用同一把鎖。(我好像廢話了……)
同樣閃亮登場的還是我們的 Curator Framework,它封裝了各種場景的鎖,比如:共享鎖、讀寫鎖、可撤銷鎖等。
LockStartup.java
package org.bigmouth.common.zookeeper.shared;
import java.util.concurrent.TimeUnit;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.recipes.locks.InterProcessSemaphoreMutex;
import org.bigmouth.common.zookeeper.config.ZooKeeperFactory;
public class LockStartup {
public static void main(String[] args) throws Exception { CuratorFramework client = ZooKeeperFactory.get(); // ZooKeeperFactory 在上一篇文章《ZooKeeper 學習筆記—配置管理》中有
final InterProcessSemaphoreMutex processSemaphoreMutex = new InterProcessSemaphoreMutex(client, /lock
printProcess(processSemaphoreMutex);
System.out.println( Starting get lock...
boolean flag = processSemaphoreMutex.acquire(12, TimeUnit.SECONDS);
System.out.println(flag ? Getting lock successful. : Getting failed!
printProcess(processSemaphoreMutex);
Thread.sleep(20 * 1000);
if (processSemaphoreMutex.isAcquiredInThisProcess()) { processSemaphoreMutex.release();
}
printProcess(processSemaphoreMutex);
client.close();
}
private static void printProcess(final InterProcessSemaphoreMutex processSemaphoreMutex) {
// 在本進程中鎖是否激活(是否正在執行) System.out.println(isAcquiredInThisProcess: + processSemaphoreMutex.isAcquiredInThisProcess());
}
}
啟動 LockStartup,得到如下結果:
接著再啟動一個 LockStartup 實例,結果是無法獲取到鎖。程序還是會等待 12 秒,如果 12 秒后仍然無法獲取到鎖則結束:
如果我們把處理時間設置為 10 秒,等待時間為 12 秒。那么當第一個進程釋放后,第二個進程將會獲取到鎖。
Thread.sleep(10 * 1000);
還有適合其他場景的共享鎖就不一一做例子了,使用起來都類似。可以看下接口 org.apache.curator.framework.recipes.locks.InterProcessLock 的實現類。
到此,關于“ZooKeeper 共享鎖怎么創建”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!