少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
          1、volatile

          volatile字段的寫入操作happens-before于每一個后續(xù)的同一個字段的讀操作。

          因為實際上putremove等操作也會更新count的值,所以當(dāng)競爭發(fā)生的時候,volatile的語義可以保證寫操作在讀操作之前,也就保證了寫操作對后續(xù)的讀操作都是可見的,這樣后面get的后續(xù)操作就可以拿到完整的元素內(nèi)容。

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


          volatile實際上只有在多cpu或者多核下才有用。當(dāng)讀取數(shù)據(jù)時,他不會cache緩存中讀取,而是強制從內(nèi)從中讀取,這樣讀到的就是最新值。當(dāng)寫入數(shù)據(jù)的時候,會直接將數(shù)據(jù)寫入內(nèi)存中,并刷新所有其他核中的緩存,這樣其他核看到的就是最新寫入的值,也就是說,其他線程就看到了最新寫入的值。

          一般說來,volatile用在如下的幾個地方:

          1、中斷服務(wù)程序中修改的供其它程序檢測的變量需要加volatile;

          2、多任務(wù)環(huán)境下各任務(wù)間共享的標(biāo)志應(yīng)該加volatile;

          3、存儲器映射的硬件寄存器通常也要加volatile說明,因為每次對它的讀寫都可能由不同意義;


          聲明方式為  volatile declaration


          備注
          系統(tǒng)總是在 volatile 對象被請求的那一刻讀取其當(dāng)前值,即使上一條指令從同一對象請求值。而且,該對象的值在賦值時立即寫入。

          volatile 修飾符通常用于由多個線程訪問而不使用 lock 語句來序列化訪問的字段。使用 volatile 修飾符能夠確保一個線程檢索由另一線程寫入的最新值。


          posted on 2015-01-18 21:08 abin 閱讀(387) 評論(0)  編輯  收藏 所屬分類: volatile

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 龙南县| 湖口县| 武穴市| 芷江| 时尚| 甘肃省| 庆云县| 岱山县| 海林市| 农安县| 甘谷县| 锦州市| 喜德县| 平陆县| 方正县| 昌邑市| 汉川市| 越西县| 成武县| 会同县| 昭苏县| 佛坪县| 咸阳市| 西安市| 曲靖市| 佛山市| 余干县| 大石桥市| 广汉市| 鹤山市| 辽阳县| 赣州市| 龙陵县| 泉州市| 买车| 临海市| 耒阳市| 大渡口区| 沈阳市| 宾川县| 两当县|