最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單了解java volatile關鍵字實現的原理

 更新時間:2019年08月15日 09:31:37   作者:yongan  
這篇文章主要介紹了簡單了解volatile關鍵字實現的原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

一、volatile關鍵字的語義分析

1.保證可見性

對共享變量的修改,其他線程能夠馬上感知到。但不能保證原子性(i++)

2.保證有序性

3.volatile的原理和實現機制

有volatile修飾的共享變量進行寫操作的時候會多出有 “l(fā)ock”標志的匯編代碼,Lock前綴的指令在多核處理器下會引發(fā)兩件事情:

1)將當前處理器緩存行中的數據寫回到系統(tǒng)內存中

2)這個寫回內存的操作會使在其他cpu里緩存了該內存地址的數據無效。

二、volatile的使用場景

1.狀態(tài)標志(開關模式)  

package com.roy.http;
public class ShutDownDemmo extends Thread{
  private volatile boolean state = false;
  @Override
  public void run() {
    while(state){
      System.out.println("我在做工作");
    }
  }
  public void shutDown(){
    state = false;
  }  
}

當調用shutDown方法時,里面只有一個賦值操作,所以它是原子性的,同時state字段是volatile的,所以當值發(fā)生變化時其它線程會立即察覺到。

2.雙重檢查鎖定(double-checked-locking)

package com.roy.http;
public class Singleton {
  private volatile static Singleton instance;
  public static Singleton getInstance(){
    if (instance==null) {
      synchronized (Singleton.class) {
        instance = new Singleton();
      }
    }
    return instance;
  }
}

單例模式中使用雙重檢查鎖定。

三、volatile和synchronized的區(qū)別

1.使用上的區(qū)別

volatile只能修飾變量,而synchronized只能修飾方法和語句塊。

2.對原子性的保證

volatile不能保證原子性,synchronized保證了原子性。

3.對可見性的保證

兩者都能保證可見性,但實現原理不同

volatile對變量添加了lock,synchronized使用monitorenter和monitorexit。

4.對有序性的保證

volatile能保證有序,synchronized也能保證有序,但是代價大

5.其他

synchronized會引起阻塞,volatile不會引起阻塞。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java接口和抽象類有什么區(qū)別

    Java接口和抽象類有什么區(qū)別

    這篇文章主要介紹了Java接口和抽象類有什么區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • Java中equals()方法實例詳解

    Java中equals()方法實例詳解

    equals方法是java.lang.Object類的方法,下面這篇文章主要給大家介紹了關于Java中equals()方法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-12-12
  • mybatis中BigDecimal中的0存為null的坑及解決

    mybatis中BigDecimal中的0存為null的坑及解決

    在使用MyBatis進行數據庫操作時,若Java中屬性類型為BigDecimal且值為0,插入數據庫時可能會變?yōu)閚ull,而不是0,這個問題可能是由于MyBatis在處理BigDecimal類型時的弱類型判斷導致的,當BigDecimal變量與空字符串進行比較時,MyBatis可能將其視為null
    2024-10-10
  • SpringBoot中獲取profile的方法詳解

    SpringBoot中獲取profile的方法詳解

    這篇文章主要介紹了springboot獲取profile的操作,文中的示例代碼講解詳細,具有很好的參考價值,希望對大家有所幫助
    2022-04-04
  • 詳解Java的TCP/IP編程學習--基于定界符的成幀

    詳解Java的TCP/IP編程學習--基于定界符的成幀

    這篇文章主要介紹了Java的TCP/IP編程學習--基于定界符的成幀,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Java compareTo用法詳解

    Java compareTo用法詳解

    在Java編程中,有時候我們需要對對象進行比較和排序,為了實現這一目標,Java提供了一個非常有用的接口叫做Comparable,以及一個重要的方法compareTo,下面我們就來看看compareTo的具體用法吧
    2023-09-09
  • Java深入講解二十三種設計模式之中的策略模式

    Java深入講解二十三種設計模式之中的策略模式

    策略模式屬于Java 23種設計模式中行為模式之一,該模式定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法的變化不會影響使用算法的客戶。本文將通過示例詳細講解這一模式,需要的可以參考一下
    2022-05-05
  • springboot?jpa?實現返回結果自定義查詢

    springboot?jpa?實現返回結果自定義查詢

    這篇文章主要介紹了springboot?jpa?實現返回結果自定義查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java詳細講解異常Exception的處理

    Java詳細講解異常Exception的處理

    異常就是不正常,比如當我們身體出現了異常我們會根據身體情況選擇喝開水、吃藥、看病、等?異常處理方法。?java異常處理機制是我們java語言使用異常處理機制為程序提供了錯誤處理的能力,程序出現的錯誤,程序可以安全的退出,以保證程序正常的運行等
    2022-06-06
  • SpringBoot整合Quartz實現定時任務詳解

    SpringBoot整合Quartz實現定時任務詳解

    這篇文章主要介紹了Java?任務調度框架?Quartz,Quartz是OpenSymphony開源組織在Job?scheduling領域又一個開源項目,完全由Java開發(fā),可以用來執(zhí)行定時任務,類似于java.util.Timer。,下面我們來學習一下關于?Quartz更多的詳細內容,需要的朋友可以參考一下
    2022-08-08

最新評論

北安市| 赤水市| 荥阳市| 鄂托克旗| 屯留县| 屯留县| 鲁甸县| 清水河县| 顺昌县| 睢宁县| 体育| 辽阳市| 闵行区| 马公市| 航空| 乐清市| 临海市| 安平县| 余庆县| 莎车县| 砀山县| 清涧县| 长岭县| 长丰县| 焦作市| 精河县| 太白县| 静海县| 依兰县| 获嘉县| 呈贡县| 宁城县| 罗平县| 临清市| 钦州市| 安岳县| 石棉县| 交城县| 钟山县| 景东| 买车|