<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • java分布式鎖的原理以及實(shí)現(xiàn)方法

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

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

                 學(xué)過(guò)Java多線程的應(yīng)該都知道什么是鎖,沒(méi)學(xué)過(guò)的也不用擔(dān)心,Java中的鎖可以簡(jiǎn)單的理解為多線程情況下訪問(wèn)臨界資源的一種線程同步機(jī)制。

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

            一、為什么要使用分布式鎖
            我們?cè)陂_(kāi)發(fā)應(yīng)用的時(shí)候,如果需要對(duì)某一個(gè)共享變量進(jìn)行多線程同步訪問(wèn)的時(shí)候,可以使用我們學(xué)到的Java多線程的18般武藝進(jìn)行處理,并且可以完美的運(yùn)行,毫無(wú)Bug!

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

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


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

            若注釋掉使用鎖的部分:

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

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

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

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

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

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

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

            缺點(diǎn):因?yàn)樾枰l繁的創(chuàng)建和刪除節(jié)點(diǎn),性能上不如Redis方式。

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

            在分布式環(huán)境中,對(duì)資源進(jìn)行上鎖有時(shí)候是很重要的,比如搶購(gòu)某一資源,這時(shí)候使用分布式鎖就可以很好地控制資源。
            當(dāng)然,在具體使用中,還需要考慮很多因素,比如超時(shí)時(shí)間的選取,獲取鎖時(shí)間的選取對(duì)并發(fā)量都有很大的影響,上述實(shí)現(xiàn)的分布式鎖也只是一種簡(jiǎn)單的實(shí)現(xiàn),主要是一種思想,以上包括文中的代碼可能并不適用于正式的生產(chǎn)環(huán)境,只做入門(mé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分布式鎖的原理以及實(shí)現(xiàn)方法”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)java分布式鎖的原理以及實(shí)現(xiàn)方法這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

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

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

            廣告

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

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

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 爱爱中文字幕 | 欧美在线视频不卡豆花 | 怡红院欧美性爱 | 国产成人无码在线高清播放 | 男女练啪在线观看视频 |