少年阿賓

          那些青春的歲月

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

          常用鏈接

          留言簿(22)

          我參與的團(tuán)隊(duì)

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          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)鍵字。 
          
          
          就跟C中的一樣 禁止編譯器進(jìn)行優(yōu)化~~~~
          在并發(fā)中可保證內(nèi)存一致性
          volatile聲明的變量只在主存中存儲(chǔ)
          讀取的時(shí)候,會(huì)有讀取臟數(shù)據(jù)的情況發(fā)生
          但是寫數(shù)據(jù)的時(shí)候,是能保證數(shù)據(jù)能正確寫入

          volatile只保證每次都從主存拿數(shù)據(jù),其他保證不了什么吧?
          告訴編譯器不要使用緩存

          非long、double變量不能保證原子性,非volatile變量不能保證內(nèi)存可見性。

          volatile 還能防止reorder...
          就是內(nèi)存屏蔽,防止指令重拍
          其實(shí)目的就是保證可見性
          可以操作volatile...變量 但是不代表你的操作指令是原子的








          posted on 2012-10-18 10:38 abin 閱讀(342) 評(píng)論(0)  編輯  收藏 所屬分類: JavaMultithread
          主站蜘蛛池模板: 正宁县| 孟津县| 天水市| 阿合奇县| 长葛市| 淮北市| 德昌县| 华阴市| 津市市| 乐平市| 新绛县| 多伦县| 龙川县| 上栗县| 昌平区| 赤水市| 准格尔旗| 玛沁县| 淮南市| 仙桃市| 满洲里市| 永修县| 中江县| 万宁市| 塘沽区| 梨树县| 武义县| 永春县| 茌平县| 桂平市| 潼关县| 西贡区| 玉树县| 绥江县| 名山县| 宜川县| 临清市| 大洼县| 镇巴县| 屏南县| 长武县|