亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java并發(fā)編程之原子變量與非阻塞同步機制

 更新時間:2015年04月14日 09:12:39   投稿:junjie  
這篇文章主要介紹了Java并發(fā)編程之原子變量與非阻塞同步機制,本文講解了非阻塞算法、悲觀技術(shù)、樂觀技術(shù)、CAS操作、原子變量、性能比較:鎖與原子變量等內(nèi)容,需要的朋友可以參考下

1.非阻塞算法

非阻塞算法屬于并發(fā)算法,它們可以安全地派生它們的線程,不通過鎖定派生,而是通過低級的原子性的硬件原生形式 —— 例如比較和交換。非阻塞算法的設(shè)計與實現(xiàn)極為困難,但是它們能夠提供更好的吞吐率,對生存問題(例如死鎖和優(yōu)先級反轉(zhuǎn))也能提供更好的防御。使用底層的原子化機器指令取代鎖,比如比較并交換(CAS,compare-and-swap).

2.悲觀技術(shù)

獨占鎖是一種悲觀的技術(shù).它假設(shè)最壞的情況發(fā)生(如果不加鎖,其它線程會破壞對象狀態(tài)),即使沒有發(fā)生最壞的情況,仍然用鎖保護對象狀態(tài).

3.樂觀技術(shù)

依賴沖突監(jiān)測.先更新,如果監(jiān)測發(fā)生沖突發(fā)生,則放棄更新后重試,否則更新成功.現(xiàn)在處理器都有原子化的讀-改-寫指令,比如比較并交換(CAS,compare-and-swap).

4.CAS操作

CAS有3個操作數(shù),內(nèi)存值V,舊的預期值A(chǔ),要修改的新值B。當且僅當預期值A(chǔ)和內(nèi)存值V相同時,將內(nèi)存值V修改為B,否則什么都不做。CAS典型使用模式是:首先從V中讀取A,并根據(jù)A計算新值B,然后再通過CAS以原子方式將V中的值由A變成B(只要在這期間沒有任何線程將V的值修改為其他值)。

清單 3. 說明比較并交換的行為(而不是性能)的代碼

復制代碼 代碼如下:

public class SimulatedCAS {
     private int value;

     public synchronized int getValue() { return value; }

    public synchronized int compareAndSwap(int expectedValue, int newValue) {
         int oldValue = value;
         if (value == expectedValue)
             value = newValue;
         return oldValue;
     }
}


清單 4. 使用比較并交換實現(xiàn)計數(shù)器
復制代碼 代碼如下:

public class CasCounter {
    private SimulatedCAS value;
    public int getValue() {
        return value.getValue();
    }
    public int increment() {
        int oldValue = value.getValue();
        while (value.compareAndSwap(oldValue, oldValue + 1) != oldValue)
            oldValue = value.getValue();
        return oldValue + 1;
    }
}

5.原子變量

原子變量支持不用鎖保護就能原子性更新操作,其底層用CAS實現(xiàn)。共有12個原子變量,可分為4組:標量類、更新器類、數(shù)組類以及復合變量類。最常用的原子變量就是標量類:AtomicInteger、AtomicLong、AtomicBoolean以及AtomicReference。所有類型都支持CAS。

6.性能比較:鎖與原子變量

在中低程度的競爭下,原子變量能提供很高的可伸縮性,原子變量性能超過鎖;而在高強度的競爭下,鎖能夠更有效地避免競爭,鎖的性能將超過原子變量的性能。但在更真實的實際情況中,原子變量的性能將超過鎖的性能。

相關(guān)文章

  • Java設(shè)計模式之java解釋器模式詳解

    Java設(shè)計模式之java解釋器模式詳解

    這篇文章主要介紹了Java設(shè)計模式之解釋器模式定義與用法,結(jié)合具體實例形式詳細分析了Java解釋器模式的概念、原理、定義及相關(guān)操作技巧,需要的朋友可以參考下
    2021-09-09
  • SpringMVC超詳細介紹自定義攔截器

    SpringMVC超詳細介紹自定義攔截器

    Spring?MVC?的攔截器(Interceptor)與?Java?Servlet?的過濾器(Filter)類似,它主要用于攔截用戶的請求并做相應的處理,通常應用在權(quán)限驗證、記錄請求信息的日志、判斷用戶是否登錄等功能上。本文將代碼演示和文字描述詳解攔截器的原理與使用
    2022-06-06
  • springboot遠程debug調(diào)試全過程

    springboot遠程debug調(diào)試全過程

    這篇文章主要介紹了springboot遠程debug調(diào)試全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • java基于AspectJ(面向切面編程)編碼示例分享

    java基于AspectJ(面向切面編程)編碼示例分享

    AspectJ是一種面向切面程序設(shè)計的基于Java的實現(xiàn),下面對過示例學習他的使用方法,需要的朋友可以參考下
    2014-02-02
  • Java中finalize()詳解及用法

    Java中finalize()詳解及用法

    這篇文章主要介紹了Java中finalize()詳解及用法的相關(guān)資料,final是Java的關(guān)鍵字,它所表示的是“這部分是無法修改的”,需要的朋友可以參考下
    2017-03-03
  • 解決@Scope(“prototype“)不生效的問題

    解決@Scope(“prototype“)不生效的問題

    這篇文章主要介紹了解決@Scope(“prototype“)不生效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • feign參數(shù)過多導致調(diào)用失敗的解決方案

    feign參數(shù)過多導致調(diào)用失敗的解決方案

    這篇文章主要介紹了feign參數(shù)過多導致調(diào)用失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • arthas排查jvm中CPU占用過高問題解決

    arthas排查jvm中CPU占用過高問題解決

    這篇文章主要介紹了arthas排查jvm中CPU占用過高問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • SpringMVC基于阻塞隊列LinkedBlockingQueue的同步長輪詢功能實現(xiàn)詳解

    SpringMVC基于阻塞隊列LinkedBlockingQueue的同步長輪詢功能實現(xiàn)詳解

    這篇文章主要介紹了SpringMVC基于阻塞隊列LinkedBlockingQueue的同步長輪詢功能實現(xiàn)詳解,本文介紹的也是生產(chǎn)者消費者的一種實現(xiàn),生產(chǎn)者不必是一個始終在執(zhí)行的線程,它可以是一個接口,接受客戶端的請求,向隊列中插入消息,需要的朋友可以參考下
    2023-07-07
  • IDEA?mybatis?Mapper.xml報紅的最新解決辦法

    IDEA?mybatis?Mapper.xml報紅的最新解決辦法

    這篇文章主要介紹了IDEA?mybatis?Mapper.xml報紅的解決辦法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04

最新評論