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

淺析java volatitle 多線程問題

 更新時(shí)間:2013年08月27日 09:10:54   作者:  
Volatile修飾的成員變量在每次被線程訪問時(shí),都強(qiáng)迫從共享內(nèi)存中重讀該成員變量的值。而且,當(dāng)成員變量發(fā)生變化時(shí),強(qiáng)迫線程將變化值回寫到共享內(nèi)存

我們知道,在Java中設(shè)置變量值的操作,除了long和double類型的變量外都是原子操作,也就是說,對(duì)于變量值的簡單讀寫操作沒有必要進(jìn)行同步。

這在JVM 1.2之前,Java的內(nèi)存模型實(shí)現(xiàn)總是從主存讀取變量,是不需要進(jìn)行特別的注意的。而隨著JVM的成熟和優(yōu)化,現(xiàn)在在多線程環(huán)境下volatile關(guān)鍵字的使用變得非常重要。在當(dāng)前的Java內(nèi)存模型下,線程可以把變量保存在本地內(nèi)存(比如機(jī)器的寄存器)中,而不是直接在主存中進(jìn)行讀寫。這就可能造成一個(gè)線程在主存中修改了一個(gè)變量的值,而另外一個(gè)線程還繼續(xù)使用它在寄存器中的變量值的拷貝,造成數(shù)據(jù)的不一致。要解決這個(gè)問題,只需要像在本程序中的這樣,把該變量聲明為volatile(不穩(wěn)定的)即可,這就指示JVM,這個(gè)變量是不穩(wěn)定的,每次使用它都到主存中進(jìn)行讀取。一般說
來,多任務(wù)環(huán)境下各任務(wù)間共享的標(biāo)志都應(yīng)該加volatile修飾。

Volatile修飾的成員變量在每次被線程訪問時(shí),都強(qiáng)迫從共享內(nèi)存中重讀該成員變量的值。而且,當(dāng)成員變量發(fā)生變化時(shí),強(qiáng)迫線程將變化值回寫到共享內(nèi)存。這樣在任何時(shí)刻,兩個(gè)不同的線程總是看到某個(gè)成員變量的同一個(gè)值。

Java語言規(guī)范中指出:為了獲得最佳速度,允許線程保存共享成員變量的私有拷貝,而且只當(dāng)線程進(jìn)入或者離開同步代碼塊時(shí)才與共享成員變量的原始值對(duì)比。

這樣當(dāng)多個(gè)線程同時(shí)與某個(gè)對(duì)象交互時(shí),就必須要注意到要讓線程及時(shí)的得到共享成員變量的變化。

而volatile關(guān)鍵字就是提示VM:對(duì)于這個(gè)成員變量不能保存它的私有拷貝,而應(yīng)直接與共享成員變量交互。

使用建議:在兩個(gè)或者更多的線程訪問的成員變量上使用volatile。當(dāng)要訪問的變量已在synchronized代碼塊中,或者為常量時(shí),不必使用。

由于使用volatile屏蔽掉了VM中必要的代碼優(yōu)化,所以在效率上比較低,因此一定在必要時(shí)才使用此關(guān)鍵字。

在虛擬機(jī)的實(shí)現(xiàn)中,int,char等基本類型為一個(gè)字長。而long和double占兩個(gè)字長。在某些虛擬機(jī)的實(shí)現(xiàn)中,兩個(gè)字長可能會(huì)被作為兩個(gè)原子性的單字長來操作。

如果不以volatile修飾long和double,如果多線程訪問該變量,由于long操作的整體非原子性而導(dǎo)致結(jié)果混亂。
比如:int,一個(gè)線程寫入4,另一個(gè)寫入5. 最后肯定是4或者5.而 long型,可能就是個(gè)亂七八糟的數(shù)值了。

相關(guān)文章

  • J2SE基礎(chǔ)之命令行中編寫第一個(gè) Hello World

    J2SE基礎(chǔ)之命令行中編寫第一個(gè) Hello World

    “Hello World”程序指的是只在計(jì)算機(jī)屏幕上輸出“Hello, World!”(意為“世界,你好!”)這行字符串的計(jì)算機(jī)程序。hello world作為所有編程語言的起始階段,占據(jù)著無法改變的地位,所有的編程第一步就在于此了!經(jīng)典之中的經(jīng)典!hello world!
    2016-05-05
  • NetBeans安裝提示neatbeans cannot find java 1.8 or higher

    NetBeans安裝提示neatbeans cannot find java 1.8 or higher

    今天小編就為大家分享一篇關(guān)于NetBeans安裝提示neatbeans cannot find java 1.8 or higher,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • Spring MVC攔截器的基本使用方法

    Spring MVC攔截器的基本使用方法

    這篇文章主要給大家介紹了關(guān)于Spring MVC攔截器的基本使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring MVC具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Spring MVC的web.xml配置詳解

    Spring MVC的web.xml配置詳解

    這篇文章主要介紹了Spring MVC的web.xml配置詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • 詳解SpringMVC中設(shè)置靜態(tài)資源不被攔截的問題

    詳解SpringMVC中設(shè)置靜態(tài)資源不被攔截的問題

    這篇文章主要介紹了詳解SpringMVC中設(shè)置靜態(tài)資源不被攔截的問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Spring RestTemplate的使用與踩坑

    Spring RestTemplate的使用與踩坑

    RestTemplate是一個(gè)執(zhí)行HTTP請(qǐng)求的同步阻塞式工具類,它僅僅只是在HTTP客戶端庫基礎(chǔ)上,封裝了更加簡單易用的模板方法API,方便程序員利用已提供的模板方法發(fā)起網(wǎng)絡(luò)請(qǐng)求和處理,能很大程度上提升我們的開發(fā)效率
    2023-02-02
  • Spring-cloud Feign 的深入理解

    Spring-cloud Feign 的深入理解

    這篇文章主要介紹了Spring-cloud Feign 的深入理解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • SpringBoot?+?Redis如何解決重復(fù)提交問題(冪等)

    SpringBoot?+?Redis如何解決重復(fù)提交問題(冪等)

    在開發(fā)中,一個(gè)對(duì)外暴露的接口可能會(huì)面臨瞬間的大量重復(fù)請(qǐng)求,本文就介紹了SpringBoot + Redis如何解決重復(fù)提交問題,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-12-12
  • 詳解Spring Boot實(shí)戰(zhàn)之Restful API的構(gòu)建

    詳解Spring Boot實(shí)戰(zhàn)之Restful API的構(gòu)建

    這篇文章主要介紹了詳解Spring Boot實(shí)戰(zhàn)之Restful API的構(gòu)建,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • java實(shí)現(xiàn)自定義時(shí)鐘并實(shí)現(xiàn)走時(shí)功能

    java實(shí)現(xiàn)自定義時(shí)鐘并實(shí)現(xiàn)走時(shí)功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)自定義時(shí)鐘并實(shí)現(xiàn)走時(shí)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評(píng)論

南漳县| 新兴县| 兴义市| 江孜县| 玉山县| 湖南省| 含山县| 乐东| 汕尾市| 焦作市| 新余市| 九龙县| 韩城市| 孟州市| 平阴县| 青冈县| 衡阳市| 万安县| 尚义县| 潮安县| 那坡县| 奉新县| 琼中| 广州市| 莱芜市| 黑龙江省| 怀来县| 吉首市| 大厂| 威宁| 阳新县| 堆龙德庆县| 汤原县| 尼木县| 垦利县| 阳山县| 独山县| 祁连县| 景谷| 汉阴县| 循化|