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

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

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

    騎士の圣殿

     

    Java中的volatile關鍵字

    關于volatile
    我們知道,在Java中設置變量值的操作,除了long和double類型的變量外都是原子操作,也就是說,對于變量值的簡單讀寫操作沒有必要進行同步。這在JVM 1.2之前,Java的內存模型實現總是從主存讀取變量,是不需要進行特別的注意的。而隨著JVM的成熟和優化,現在在多線程環境下volatile關鍵字的使用變得非常重要。在當前的Java內存模型下,線程可以把變量保存在本地內存(比如機器的寄存器)中,而不是直接在主存中進行讀寫。這就可能造成一個線程在主存中修改了一個變量的值,而另外一個線程還繼續使用它在寄存器中的變量值的拷貝,造成數據的不一致。要解決這個問題,只需要像在本程序中的這樣,把該變量聲明為volatile(不穩定的)即可,這就指示JVM,這個變量是不穩定的,每次使用它都到主存中進行讀取。一般說來,多任務環境下各任務間共享的標志都應該加volatile修飾。
    Volatile修飾的成員變量在每次被線程訪問時,都強迫從共享內存中重讀該成員變量的值。而且,當成員變量發生變化時,強迫線程將變化值回寫到共享內存。這樣在任何時刻,兩個不同的線程總是看到某個成員變量的同一個值。 

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

    這樣當多個線程同時與某個對象交互時,就必須要注意到要讓線程及時的得到共享成員變量的變化。 

    而volatile關鍵字就是提示VM:對于這個成員變量不能保存它的私有拷貝,而應直接與共享成員變量交互。 

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

    由于使用volatile屏蔽掉了VM中必要的代碼優化,所以在效率上比較低,因此一定在必要時才使用此關鍵字。 

    posted on 2007-11-21 11:12 最後の騎士 閱讀(5048) 評論(2)  編輯  收藏 所屬分類: java技術

    評論

    # re: Java中的volatile關鍵字 2011-09-20 12:16 corvin

    我看了很多篇文章,你的是寫的最通俗易懂的,初學者需要你這樣的會把自己的理解講的很清晰易懂的導師  回復  更多評論   

    # re: Java中的volatile關鍵字 2013-01-23 20:17 小源求學

    嗯,這篇文章寫得不錯哦  回復  更多評論   

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    文章分類

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲五月午夜免费在线视频| 久久亚洲AV成人无码国产电影 | 亚洲欧洲自拍拍偷午夜色| 9久热精品免费观看视频| 91麻豆国产自产在线观看亚洲| 边摸边脱吃奶边高潮视频免费| 国产男女猛烈无遮档免费视频网站| 亚洲精品无码久久久久秋霞| 免费无码又爽又刺激高潮 | 国产无遮挡色视频免费观看性色| 亚洲精品视频免费观看| 国产日韩精品无码区免费专区国产 | 亚洲国产高清国产拍精品| 永久免费视频v片www| 亚洲av无码成人精品国产| 亚洲&#228;v永久无码精品天堂久久 | 亚洲日本一区二区一本一道 | 国产精品久免费的黄网站| 免费一级全黄少妇性色生活片 | 综合偷自拍亚洲乱中文字幕| 亚洲国产精品自在拍在线播放| 国产精品视频全国免费观看| 亚洲成人精品久久| 99在线视频免费观看视频| 亚洲av纯肉无码精品动漫| 国产精品亚洲产品一区二区三区| 免费在线中文日本| 99999久久久久久亚洲| 波多野结衣中文一区二区免费 | 91免费在线播放| 亚洲av无码兔费综合| 亚洲色无码一区二区三区| 91久久精品国产免费直播| jzzijzzij在线观看亚洲熟妇| 亚洲视频在线免费| 亚洲精品国产免费| 看成年女人免费午夜视频| 亚洲视频2020| 国产精品国产免费无码专区不卡| 好久久免费视频高清| 亚洲精品久久无码|