成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

無鎖算法

hover_lew / 2561人閱讀

摘要:無鎖算法在并發(fā)編程中,提供了很多并發(fā)編程工具類。在包下有一個(gè)包叫,下面所有的工具,我們都稱為它是無鎖算法的一種實(shí)現(xiàn)。相對于有鎖算法來說,無鎖算法不會使等待線程休眠或者阻塞。

無鎖算法

在Java并發(fā)編程中,Java提供了很多并發(fā)編程工具類。在JUC包下有一個(gè)包叫atomic,下面所有的工具,我們都稱為它是無鎖算法的一種實(shí)現(xiàn)。

相對于有鎖算法來說,無鎖算法不會使等待線程休眠或者阻塞。它的具體原理是這樣的:

比如有一個(gè)變量x,初始值為0

int x = 0

現(xiàn)在有兩個(gè)線程A-Thread,B-Thread同時(shí)去修改變量 x,是x++,正確執(zhí)行的情況下,x最后結(jié)果應(yīng)該是2

利用無鎖算法的實(shí)現(xiàn)是這樣的

public final int incrementAndGet() {
    for (;;) {
        int current = get();
        int next = current + 1;
        
        # compareAndSet會原子性的執(zhí)行先判斷current和內(nèi)存中的值是否相等,如果不等就失敗返回false
        if (compareAndSet(current, next))
            return next;
    }
}

在這個(gè)列子中,利用無鎖算法,當(dāng)線程需要重新設(shè)置變量的值時(shí),都會攜帶當(dāng)前值current和新值new去調(diào)用 `compareAndSet()` 方法,該方法在執(zhí)行set操作會原子性的執(zhí)行 先判斷current和內(nèi)存中的值是否相等,如果不等就失敗返回false,否則就會把值設(shè)置為新值。
這個(gè)原子性的動作_先判斷current和內(nèi)存中的值是否相等,如果不等就失敗返回false_的語句需要操作系統(tǒng)支持這種指令語句。所以incrementAndGet方法是一個(gè)原子性的操作方法

所以當(dāng)A-Thread、B-Thread同時(shí)調(diào)用incrementAndGet去修改x值,x值的變化過程只會是

0->1->2

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64653.html

相關(guān)文章

  • 基于鎖的并發(fā)算法 vs 無鎖的并發(fā)算法

    摘要:測試吞吐量的時(shí)候,是通過每一種實(shí)現(xiàn)都重復(fù)測試超過次,每一次都運(yùn)行秒以上,以保證系統(tǒng)足夠預(yù)熱,下面的結(jié)果都是第次之后平均每秒吞吐量。以我的經(jīng)驗(yàn)看,教學(xué)和開發(fā)中的無鎖算法,不僅能顯著改善吞吐量同時(shí)他們也提供更低的延遲。 上周在由Heinz Kabutz通過JCrete?組織的開放空間會議(unconference)上,我參加一個(gè)新的java規(guī)范 JSR166?StampedLock 的審查...

    tomorrowwu 評論0 收藏0
  • 【實(shí)戰(zhàn)Java高并發(fā)程序設(shè)計(jì)6】挑戰(zhàn)無鎖算法

    摘要:在本例中,講述的無鎖來自于并發(fā)包我們將這個(gè)無鎖的稱為。在這里,我們使用二維數(shù)組來表示的內(nèi)部存儲,如下變量存放所有的內(nèi)部元素。為什么使用二維數(shù)組去實(shí)現(xiàn)一個(gè)一維的呢這是為了將來進(jìn)行動態(tài)擴(kuò)展時(shí)可以更加方便。 我們已經(jīng)比較完整得介紹了有關(guān)無鎖的概念和使用方法。相對于有鎖的方法,使用無鎖的方式編程更加考驗(yàn)一個(gè)程序員的耐心和智力。但是,無鎖帶來的好處也是顯而易見的,第一,在高并發(fā)的情況下,它比有鎖...

    zengdongbao 評論0 收藏0
  • Java多線程進(jìn)階(一)—— J.U.C并發(fā)包概述

    摘要:整個(gè)包,按照功能可以大致劃分如下鎖框架原子類框架同步器框架集合框架執(zhí)行器框架本系列將按上述順序分析,分析所基于的源碼為。后,根據(jù)一系列常見的多線程設(shè)計(jì)模式,設(shè)計(jì)了并發(fā)包,其中包下提供了一系列基礎(chǔ)的鎖工具,用以對等進(jìn)行補(bǔ)充增強(qiáng)。 showImg(https://segmentfault.com/img/remote/1460000016012623); 本文首發(fā)于一世流云專欄:https...

    anonymoussf 評論0 收藏0
  • Java多線程學(xué)習(xí)(七)并發(fā)編程中一些問題

    摘要:因?yàn)槎嗑€程競爭鎖時(shí)會引起上下文切換。減少線程的使用。舉個(gè)例子如果說服務(wù)器的帶寬只有,某個(gè)資源的下載速度是,系統(tǒng)啟動個(gè)線程下載該資源并不會導(dǎo)致下載速度編程,所以在并發(fā)編程時(shí),需要考慮這些資源的限制。 最近私下做一項(xiàng)目,一bug幾日未解決,總惶恐。一日頓悟,bug不可怕,怕的是項(xiàng)目不存在bug,與其懼怕,何不與其剛正面。 系列文章傳送門: Java多線程學(xué)習(xí)(一)Java多線程入門 Jav...

    yimo 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<