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

簡單了解java volatile關(guān)鍵字實現(xiàn)的原理

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

一、volatile關(guān)鍵字的語義分析

1.保證可見性

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

2.保證有序性

3.volatile的原理和實現(xiàn)機制

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

1)將當(dāng)前處理器緩存行中的數(shù)據(jù)寫回到系統(tǒng)內(nèi)存中

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

二、volatile的使用場景

1.狀態(tài)標(biāo)志(開關(guān)模式)  

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;
  }  
}

當(dāng)調(diào)用shutDown方法時,里面只有一個賦值操作,所以它是原子性的,同時state字段是volatile的,所以當(dāng)值發(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.對可見性的保證

兩者都能保證可見性,但實現(xiàn)原理不同

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

4.對有序性的保證

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

5.其他

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

    Java中equals()方法實例詳解

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

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

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

    SpringBoot中獲取profile的方法詳解

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

    詳解Java的TCP/IP編程學(xué)習(xí)--基于定界符的成幀

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

    Java compareTo用法詳解

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

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

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

    springboot?jpa?實現(xiàn)返回結(jié)果自定義查詢

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

    Java詳細(xì)講解異常Exception的處理

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

    SpringBoot整合Quartz實現(xiàn)定時任務(wù)詳解

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

最新評論

汾西县| 百色市| 怀柔区| 荃湾区| 邛崃市| 满洲里市| 波密县| 菏泽市| 江源县| 大竹县| 阿拉善左旗| 乌鲁木齐市| 黔南| 台南市| 西乌珠穆沁旗| 黄大仙区| 烟台市| 阳东县| 云龙县| 伊金霍洛旗| 大同市| 全椒县| 芒康县| 禄劝| 高清| 芮城县| 康平县| 介休市| 昔阳县| 临城县| 溧阳市| 绥中县| 大宁县| 保德县| 区。| 志丹县| 玉林市| 乳山市| 昌乐县| 建昌县| 房产|