免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
使用Zookeeper實(shí)現(xiàn)分布式鎖

利用Zookeeper臨時(shí)節(jié)點(diǎn)(客戶端異常斷開連接后臨時(shí)節(jié)點(diǎn)自動(dòng)移除)或者Redis SETNX(set if not exists)(設(shè)置ttl)可以實(shí)現(xiàn)分布式鎖,這里先利用zk實(shí)現(xiàn)一個(gè)

1.啟動(dòng)zk

?

2.代碼中watch節(jié)點(diǎn)

?  2.1 Maven引入zk & zk client

  

  2.2 代碼和注釋

import org.I0Itec.zkclient.ZkClient;import java.util.concurrent.CountDownLatch;public class ZKDistributeLockTest {    public static void main(String[] args) {        // 使用CountDownLunch控制線程同時(shí)執(zhí)行        CountDownLatch countDownLatch = new CountDownLatch(1);        // 開啟3個(gè)線程模擬分布式環(huán)境,分布式環(huán)境下每個(gè)進(jìn)程都是一個(gè)單獨(dú)的zkClient        Thread t1 = new Thread(new TestThread(countDownLatch));        Thread t2 = new Thread(new TestThread(countDownLatch));        Thread t3 = new Thread(new TestThread(countDownLatch));        t1.start();        t2.start();        t3.start();        System.out.println("休眠1秒后執(zhí)行..."   System.currentTimeMillis());        try {            Thread.sleep(1000);        } catch (InterruptedException e) {            e.printStackTrace();        }        // 倒計(jì)時(shí)結(jié)束        countDownLatch.countDown();    }}// 線程,嘗試在zk上創(chuàng)建臨時(shí)節(jié)點(diǎn),創(chuàng)建成功則獲得鎖(執(zhí)行權(quán))class TestThread implements Runnable {    // 共享變量    private static Integer CNT = 0;    private ZkClient zkClient;    private CountDownLatch countDownLatch;    public TestThread(CountDownLatch countDownLatch) {        this.countDownLatch = countDownLatch;    }    // 連接zk    private void connect() {        String threadName = Thread.currentThread().getName();        try {            System.out.println(threadName   " 等待執(zhí)行...");            // 等待倒計(jì)時(shí)結(jié)束            countDownLatch.await();        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println(threadName   " 請(qǐng)求連接zk..."   System.currentTimeMillis());        zkClient = new ZkClient("192.168.1.217:2181", 20000);        System.out.println(threadName   " 連接成功...");        // 輸出目錄信息測(cè)試//        List<String> children = zkClient.getChildren("/");//        children.forEach(System.out::println);    }    @Override    public void run() {        // 初始化連接(在各個(gè)線程里開啟連接,模擬分布式環(huán)境)        connect();        String threadName = Thread.currentThread().getName();        // 競爭鎖        while (true) {            try {                System.out.println(threadName   " 開始競爭鎖...");                // 創(chuàng)建zk臨時(shí)節(jié)點(diǎn)                zkClient.createEphemeral("/dl", "test");                System.out.println(threadName   " 獲得鎖?。?!");                // 獲得鎖后修改共享變量                CNT   ;                System.out.println(threadName   " 釋放了鎖..."   CNT);                zkClient.delete("/dl");                Thread.sleep(2000);            } catch (Exception e) {                // 創(chuàng)建臨時(shí)節(jié)點(diǎn)失敗,表示未獲得鎖                System.out.println(threadName   " 未獲得鎖,將重試!?。?);//                System.out.println(e.getMessage());                try {                    Thread.sleep(1500);                } catch (InterruptedException e1) {                    e1.printStackTrace();                }            }        }    }}

  

3.測(cè)試結(jié)果

?

來源:https://www.icode9.com/content-4-339151.html
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
『互聯(lián)網(wǎng)架構(gòu)』軟件架構(gòu)
分布式鎖與實(shí)現(xiàn)(二)——基于ZooKeeper實(shí)現(xiàn)
ZooKeeper 分布式鎖的實(shí)現(xiàn)
分布式之zk的應(yīng)用場景
zookeeper 分布式鎖種類以及優(yōu)缺點(diǎn)
再有人問你分布式鎖,就把這個(gè)丟給他!
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服