您好,登錄后才能下訂單哦!
這篇文章主要介紹“ZooKeeper共享鎖怎么創(chuàng)建”,在日常操作中,相信很多人在ZooKeeper共享鎖怎么創(chuàng)建問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ZooKeeper共享鎖怎么創(chuàng)建”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
眾所周知,在Java開發(fā)中,要?jiǎng)?chuàng)建一個(gè)單進(jìn)程鎖非常簡單,使用JDK中自帶的java.util.concurrent.locks.Lock接口即可實(shí)現(xiàn)鎖的功能。
如今已經(jīng)到了大數(shù)據(jù)、云的時(shí)代,而這種鎖已經(jīng)無法滿足集群服務(wù)間鎖的需求了,本文將簡單說下如何使用ZooKeeper來實(shí)現(xiàn)共享鎖功能。至于什么是共享鎖呢?理解起來也很簡單:就是指在多個(gè)實(shí)例中使用同一把鎖。(我好像廢話了……)
同樣閃亮登場的還是我們的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學(xué)習(xí)筆記—配置管理》中有 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) { // 在本進(jìn)程中鎖是否激活(是否正在執(zhí)行) System.out.println("isAcquiredInThisProcess: " + processSemaphoreMutex.isAcquiredInThisProcess()); } }
啟動LockStartup,得到如下結(jié)果:
接著再啟動一個(gè)LockStartup實(shí)例,結(jié)果是無法獲取到鎖。程序還是會等待12秒,如果12秒后仍然無法獲取到鎖則結(jié)束:
如果我們把處理時(shí)間設(shè)置為10秒,等待時(shí)間為12秒。那么當(dāng)?shù)谝粋€(gè)進(jìn)程釋放后,第二個(gè)進(jìn)程將會獲取到鎖。
Thread.sleep(10 * 1000);
還有適合其他場景的共享鎖就不一一做例子了,使用起來都類似??梢钥聪陆涌趏rg.apache.curator.framework.recipes.locks.InterProcessLock的實(shí)現(xiàn)類。
到此,關(guān)于“ZooKeeper共享鎖怎么創(chuàng)建”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。