java分布式鎖的原理以及實現(xiàn)方法

這篇文章主要講解了“java分布式鎖的原理以及實現(xiàn)方法”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“java分布式鎖的原理以及實現(xiàn)方法”吧!

創(chuàng)新互聯(lián)建站專注于開平企業(yè)網(wǎng)站建設(shè),響應式網(wǎng)站,電子商務商城網(wǎng)站建設(shè)。開平網(wǎng)站建設(shè)公司,為開平等地區(qū)提供建站服務。全流程定制制作,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務

     學過Java多線程的應該都知道什么是鎖,沒學過的也不用擔心,Java中的鎖可以簡單的理解為多線程情況下訪問臨界資源的一種線程同步機制。

     在學習或者使用Java的過程中進程會遇到各種各樣的鎖的概念:公平鎖、非公平鎖、自旋鎖、可重入鎖、偏向鎖、輕量級鎖、重量級鎖、讀寫鎖、互斥鎖等。文獻參考《Java多線程核心技術(shù)》

一、為什么要使用分布式鎖
我們在開發(fā)應用的時候,如果需要對某一個共享變量進行多線程同步訪問的時候,可以使用我們學到的Java多線程的18般武藝進行處理,并且可以完美的運行,毫無Bug!

注意這是單機應用,也就是所有的請求都會分配到當前服務器的JVM內(nèi)部,然后映射為操作系統(tǒng)的線程進行處理!而這個共享變量只是在這個JVM內(nèi)部的一塊內(nèi)存空間!

后來業(yè)務發(fā)展,需要做集群,一個應用需要部署到幾臺機器上然后做負載均衡,大致如下圖:


     java分布式鎖的原理以及實現(xiàn)方法

若注釋掉使用鎖的部分:

public void seckill() {
    // 返回鎖的value值,供釋放鎖時候進行判斷
    //String indentifier = lock.lockWithTimeout("resource", 5000, 1000);
    System.out.println(Thread.currentThread().getName() + "獲得了鎖");
    System.out.println(--n);
    //lock.releaseLock("resource", indentifier);

從結(jié)果可以看出,有一些是異步進行的:

è??é??????????????è?°

5、基于ZooKeeper的實現(xiàn)方式
ZooKeeper是一個為分布式應用提供一致性服務的開源組件,它內(nèi)部是一個分層的文件系統(tǒng)目錄樹結(jié)構(gòu),規(guī)定同一個目錄下只能有一個唯一文件名?;赯ooKeeper實現(xiàn)分布式鎖的步驟如下:

(1)創(chuàng)建一個目錄mylock;
(2)線程A想獲取鎖就在mylock目錄下創(chuàng)建臨時順序節(jié)點;
(3)獲取mylock目錄下所有的子節(jié)點,然后獲取比自己小的兄弟節(jié)點,如果不存在,則說明當前線程順序號最小,獲得鎖;
(4)線程B獲取所有節(jié)點,判斷自己不是最小節(jié)點,設(shè)置監(jiān)聽比自己次小的節(jié)點;
(5)線程A處理完,刪除自己的節(jié)點,線程B監(jiān)聽到變更事件,判斷自己是不是最小的節(jié)點,如果是則獲得鎖。

這里推薦一個Apache的開源庫Curator,它是一個ZooKeeper客戶端,Curator提供的InterProcessMutex是分布式鎖的實現(xiàn),acquire方法用于獲取鎖,release方法用于釋放鎖。

優(yōu)點:具備高可用、可重入、阻塞鎖特性,可解決失效死鎖問題。

缺點:因為需要頻繁的創(chuàng)建和刪除節(jié)點,性能上不如Redis方式。

6、總結(jié)
上面的三種實現(xiàn)方式,沒有在所有場合都是完美的,所以,應根據(jù)不同的應用場景選擇最適合的實現(xiàn)方式。

在分布式環(huán)境中,對資源進行上鎖有時候是很重要的,比如搶購某一資源,這時候使用分布式鎖就可以很好地控制資源。
當然,在具體使用中,還需要考慮很多因素,比如超時時間的選取,獲取鎖時間的選取對并發(fā)量都有很大的影響,上述實現(xiàn)的分布式鎖也只是一種簡單的實現(xiàn),主要是一種思想,以上包括文中的代碼可能并不適用于正式的生產(chǎn)環(huán)境,只做入門參考! 

1、https://yq.aliyun.com/articles/60663

2、http://www.hollischuang.com/archives/1716

3、https://www.cnblogs.com/liuyang0/p/6744076.html

感謝各位的閱讀,以上就是“java分布式鎖的原理以及實現(xiàn)方法”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對java分布式鎖的原理以及實現(xiàn)方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

文章題目:java分布式鎖的原理以及實現(xiàn)方法
網(wǎng)頁鏈接:http://muchs.cn/article22/pdjhcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導航、微信小程序、營銷型網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、移動網(wǎng)站建設(shè)域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)