<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 12, comments - 8, trackbacks - 0, articles - 5
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    volatile的適用場景

    Posted on 2010-11-18 14:45 楊羅羅 閱讀(1710) 評論(0)  編輯  收藏 所屬分類: java.thread

    volatile保證線程間的數(shù)據(jù)是可見的(共享的),但不保證數(shù)據(jù)同步

    volatile相當(dāng)于synchronized的弱實(shí)現(xiàn),也就是說volatile實(shí)現(xiàn)了類似synchronized的語義,卻又沒有鎖機(jī)制。它確保對volatile字段的更新以可預(yù)見的方式告知其他的線程。
    volatile包含以下語義:
    (1)Java 存儲模型不會對valatile指令的操作進(jìn)行重排序:這個(gè)保證對volatile變量的操作時(shí)按照指令的出現(xiàn)順序執(zhí)行的。
    (2)volatile變量不會被緩存在寄存器中(只有擁有線程可見)或者其他對CPU不可見的地方,每次總是從主存中讀取volatile變量的結(jié)果。也就是說對于volatile變量的修改,其它線程總是可見的,并且不是使用自己線程棧內(nèi)部的變量。也就是在happens-before法則中,對一個(gè)valatile變量的寫操作后,其后的任何讀操作理解可見此寫操作的結(jié)果。

    volatile變量的特性不錯(cuò),但是volatile并不能保證線程安全的,也就是說volatile字段的操作不是原子性的,volatile變量只能保證可見性(一個(gè)線程修改后其它線程能夠理解看到此變化后的結(jié)果),要想保證原子性,目前為止只能加鎖!

    volatile通常在下面的場景:

    volatile boolean done = false;



        
    while( ! done ){
            dosomething();
        }

     應(yīng)用volatile變量的三個(gè)原則:

    (1)寫入變量不依賴此變量的值,或者只有一個(gè)線程修改此變量

    (2)變量的狀態(tài)不需要與其它變量共同參與不變約束

    (3)訪問變量不需要加鎖

    主站蜘蛛池模板: 亚洲国产一成人久久精品| 亚洲春色另类小说| 中文字幕在线免费| 亚洲一区AV无码少妇电影| 亚洲国产V高清在线观看| 免费无码看av的网站| 一级毛片免费毛片毛片| 久久亚洲国产欧洲精品一| 一本无码人妻在中文字幕免费 | 国产裸体美女永久免费无遮挡 | 男女污污污超污视频免费在线看| 国产免费不卡v片在线观看| 真正全免费视频a毛片| 亚洲色四在线视频观看| 日本19禁啪啪无遮挡免费动图| 四虎国产精品免费永久在线| 中文字幕亚洲情99在线| 中文字幕亚洲日本岛国片| 午夜宅男在线永久免费观看网 | 全免费a级毛片免费看不卡| 花蝴蝶免费视频在线观看高清版 | 国产成人精品一区二区三区免费| 亚洲熟女www一区二区三区| 亚洲国产精品无码久久SM| 热99re久久免费视精品频软件 | 国产免费观看视频| 麻豆高清免费国产一区| 亚洲免费日韩无码系列| 亚洲日韩国产二区无码| 亚洲国语精品自产拍在线观看| 亚洲av成人一区二区三区在线观看| 亚洲免费视频网址| 亚洲综合精品第一页| 久久夜色精品国产嚕嚕亚洲av| 啊灬啊灬别停啊灬用力啊免费看| 免费v片在线观看视频网站| 国产一级a毛一级a看免费人娇| 亚洲av日韩综合一区二区三区 | 永久免费av无码入口国语片| 日韩免费码中文在线观看| 亚洲日韩小电影在线观看|