亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

無鎖算法

hover_lew / 2609人閱讀

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

無鎖算法

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

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

比如有一個變量x,初始值為0

int x = 0

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

利用無鎖算法的實現(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;
    }
}

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

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

0->1->2

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

    yimo 評論0 收藏0

發(fā)表評論

0條評論

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