一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java并發編程之原子變量與非阻塞同步機制

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

2019-12-16 13:21junjie JAVA教程

這篇文章主要介紹了Java并發編程之原子變量與非阻塞同步機制,本文講解了非阻塞算法、悲觀技術、樂觀技術、CAS操作、原子變量、性能比較:鎖與原子變量等內容,需要的朋友可以參考下

1.非阻塞算法

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

2.悲觀技術

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

3.樂觀技術

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

4.CAS操作

CAS有3個操作數,內存值V,舊的預期值A,要修改的新值B。當且僅當預期值A和內存值V相同時,將內存值V修改為B,否則什么都不做。CAS典型使用模式是:首先從V中讀取A,并根據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. 使用比較并交換實現計數器

復制代碼代碼如下:

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實現。共有12個原子變量,可分為4組:標量類、更新器類、數組類以及復合變量類。最常用的原子變量就是標量類:AtomicInteger、AtomicLong、AtomicBoolean以及AtomicReference。所有類型都支持CAS。

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

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

延伸 · 閱讀

精彩推薦
  • JAVA教程Java用文件流下載網絡文件示例代碼

    Java用文件流下載網絡文件示例代碼

    這篇文章主要介紹了Java用文件流的方式下載網絡文件,大家參考使用吧 ...

    java技術網4782019-10-22
  • JAVA教程Java用for循環Map詳細解析

    Java用for循環Map詳細解析

    本篇文章主要介紹了Java用for循環Map,需要的朋友可以過來參考下,希望對大家有所幫助 ...

    java開發網4812019-10-24
  • JAVA教程java線程并發semaphore類示例

    java線程并發semaphore類示例

    Java 5.0里新加了4個協調線程間進程的同步裝置,它們分別是Semaphore, CountDownLatch, CyclicBarrier和Exchanger,本例主要介紹Semaphore,Semaphore是用來管理一個資源池的工...

    java教程網4632019-10-31
  • JAVA教程Java進階教程之IO基礎

    Java進階教程之IO基礎

    這篇文章主要介紹了Java進階教程之IO基礎,這里只是對Java IO的基本介紹,包含讀取和寫入等操作,需要的朋友可以參考下 ...

    Vamei4892019-11-27
  • JAVA教程java日期工具類實例分享

    java日期工具類實例分享

    本文介紹一個java日期工具類,功能有英文簡寫、英文全稱、精確到毫秒的完整時間、中文簡寫、中文全稱等方法 ...

    java技術網1942019-10-29
  • JAVA教程Java設計模式之迭代模式(Iterator模式)介紹

    Java設計模式之迭代模式(Iterator模式)介紹

    這篇文章主要介紹了Java設計模式之迭代模式(Iterator模式)介紹,本文用一個老師點名的現象描述了迭代模式的使用,需要的朋友可以參考下 ...

    junjie4762019-12-11
  • JAVA教程java jdk動態代理詳解

    java jdk動態代理詳解

    動態代理類的Class實例是怎么生成的呢,是通過ProxyGenerator類來生成動態代理類的class字節流,把它載入方法區 ...

    java技術網1412019-10-14
  • JAVA教程MapReduce中ArrayWritable 使用指南

    MapReduce中ArrayWritable 使用指南

    MapReduce是一種編程模型,用于大規模數據集的并行運算。概念"Map(映射)"和"Reduce(歸約)"和他們的主要思想,都是從函數式編程語言里借來的,還有從矢量編...

    hebedich1632019-11-27
主站蜘蛛池模板: 关晓彤被调教出奶水 | 青草精品 | 男人把大ji巴放进女人小说 | 二次元美女挤奶漫画 | 亚洲视频第一页 | 999热这里全都是精品 | 明星ai智能人脸替换造梦在线播放 | 麻豆网站在线免费观看 | 久久噜国产精品拍拍拍拍 | 国产亚洲欧美一区二区三区 | 三级黄片毛片 | 国产高清国内精品福利色噜噜 | 波多野结衣小说 | 高清在线看 | 美女主播免费观看 | 美女被爆 | 人人精品久久 | 2020国产精品亚洲综合网 | 国产偷啪 | 91大片淫黄大片在线天堂 | 东北恋哥在线播放免费播放 | 精品无码人妻一区二区免费AV | 日韩小视频在线观看 | 国产一区在线 | 男人使劲躁女人小视频 | 调教开发新婚娇妻放荡 | 男人机机桶女人 | japanese秘书丝袜 | 沟厕okn系列在线播放 | 青青草国产精品久久久久 | 日韩在线一区 | 婷婷精品| sao虎影院桃红视频在线观看 | 美女用屁股把人吞进肚子 | 九九九精品视频 | 日韩亚洲人成在线综合 | sese在线观看 | 91精品国产在线 | 国产成人精品午夜视频' | 日韩视频免费一区二区三区 | 啊皇上你好大要知画 |