中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

ZooKeeper共享鎖怎么創建

發布時間:2021-12-23 12:01:26 來源:億速云 閱讀:137 作者:iii 欄目:云計算

這篇文章主要介紹“ZooKeeper共享鎖怎么創建”,在日常操作中,相信很多人在ZooKeeper共享鎖怎么創建問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ZooKeeper共享鎖怎么創建”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

眾所周知,在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,得到如下結果:

ZooKeeper共享鎖怎么創建

接著再啟動一個LockStartup實例,結果是無法獲取到鎖。程序還是會等待12秒,如果12秒后仍然無法獲取到鎖則結束:

ZooKeeper共享鎖怎么創建

如果我們把處理時間設置為10秒,等待時間為12秒。那么當第一個進程釋放后,第二個進程將會獲取到鎖。

Thread.sleep(10 * 1000);

還有適合其他場景的共享鎖就不一一做例子了,使用起來都類似。可以看下接口org.apache.curator.framework.recipes.locks.InterProcessLock的實現類。

ZooKeeper共享鎖怎么創建

到此,關于“ZooKeeper共享鎖怎么創建”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節
推薦閱讀:
  1. ZooKeeper Install
  2. Zookeeper

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

AI

沁阳市| 七台河市| 上栗县| 萝北县| 余江县| 庄河市| 海晏县| 乡城县| 屏山县| 汾阳市| 青龙| 游戏| 文昌市| 贺州市| 茂名市| 民和| 加查县| 安塞县| 溧水县| 中超| 沈丘县| 武汉市| 三亚市| 二手房| 通化县| 闽侯县| 宣恩县| 梁河县| 从化市| 岑溪市| 汝南县| 阿拉善左旗| 新平| 玉树县| 宁夏| 招远市| 喀喇沁旗| 德令哈市| 集安市| 囊谦县| 闻喜县|