隨筆-59  評(píng)論-31  文章-0  trackbacks-0
                Volatile修飾的成員變量在每次被線程訪問(wèn)時(shí),都強(qiáng)迫從共享內(nèi)存中重讀該成員變量的值。而且,當(dāng)成員變量發(fā)生變化時(shí),強(qiáng)迫線程將變化值回寫(xiě)到共享內(nèi)存。這樣在任何時(shí)刻,兩

          個(gè)不同的線程總是看到某個(gè)成員變量的同一個(gè)值。 Java語(yǔ)言規(guī)范中指出:為了獲得最佳速度,允許線程保存共享成員變量的私有拷貝,而且只當(dāng)線程進(jìn)入或者離開(kāi)同步代碼塊時(shí)才與

          共享成員變量的原始值對(duì)比。 這樣當(dāng)多個(gè)線程同時(shí)與某個(gè)對(duì)象交互時(shí),就必須要注意到要讓線程及時(shí)的得到共享成員變量的變化。 而volatile關(guān)鍵字就是提示VM:對(duì)于這個(gè)成員變量

          不能保存它的私有拷貝,而應(yīng)直接與共享成員變量交互。 使用建議:在兩個(gè)或者更多的線程訪問(wèn)的成員變量上使用volatile。當(dāng)要訪問(wèn)的變量已在synchronized代碼塊中,或者為常量

          時(shí),不必使用。 由于使用volatile屏蔽掉了VM中必要的代碼優(yōu)化,所以在效率上比較低,因此一定在必要時(shí)才使用此關(guān)鍵字。 就跟C中的一樣 禁止編譯器進(jìn)行優(yōu)化~~~~
          posted on 2011-12-28 13:58 RoyPayne 閱讀(230) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): java并發(fā)
          主站蜘蛛池模板: 观塘区| 泊头市| 濮阳县| 武平县| 东港市| 彰武县| 桂平市| 密云县| 即墨市| 留坝县| 凤山市| 遂宁市| 雷州市| 皮山县| 沽源县| 富锦市| 信丰县| 安图县| 嘉善县| 新化县| 即墨市| 冀州市| 兴义市| 阳江市| 乐陵市| 崇礼县| 娄底市| 双鸭山市| 蚌埠市| 萨迦县| 和龙市| 西和县| 冷水江市| 前郭尔| 宁乡县| 宽城| 盱眙县| 乡城县| 延长县| 滦平县| 沧源|