volatile關(guān)鍵字解釋

引入的原因:

  1. 線(xiàn)程間通信可以使用共享變量的方式(一塊公共內(nèi)存)
  2. 現(xiàn)代計(jì)算機(jī)都是多cpu的奔缠,并且為了提高效率掠抬,cpu都是帶緩存的,并且設(shè)計(jì)成分層的校哎,有一級(jí)緩存两波、二級(jí)緩存、三級(jí)緩存(L1闷哆,L2腰奋,L3)。每個(gè)cpu有自己的cache
    L1響應(yīng)時(shí)間1ns抱怔,3個(gè)時(shí)鐘周期劣坊,大小32K
    L2響應(yīng)時(shí)間3ns,大小256K
    L3響應(yīng)時(shí)間12ns屈留,大小8M
    直接訪問(wèn)主內(nèi)存的響應(yīng)時(shí)間65ns
    為什么設(shè)計(jì)這么復(fù)雜局冰,還分層?
    就是考慮成本的問(wèn)題灌危,最近也看到新聞說(shuō)內(nèi)存漲價(jià)了康二,如果不考慮成本那就簡(jiǎn)單了,直接都懟上最貴的L1cache勇蝙,就不需要開(kāi)發(fā)人員考慮這么多細(xì)節(jié)了沫勿。
    實(shí)際上一些應(yīng)用程序最熱的數(shù)據(jù)也就是那么幾K,分層的目的也就是這個(gè)原因味混。

有以上是背景产雹,在兩個(gè)線(xiàn)程訪問(wèn)的時(shí)候,如果是不同的cpu執(zhí)行這兩個(gè)線(xiàn)程翁锡,就會(huì)出現(xiàn)緩存不一致問(wèn)題洽故。

volatile的作用

  1. 被volatile修飾的變量,jvm會(huì)做一些底層的工作盗誊,保證寫(xiě)入的操作,把更改后的內(nèi)容立刻從cpu緩存回寫(xiě)到主內(nèi)存隘弊。
  2. 保證了讀的可見(jiàn)性哈踱,當(dāng)一個(gè)線(xiàn)程讀到被volatile修飾的變量的時(shí)候,會(huì)拋棄cpu緩存的值梨熙,從主內(nèi)存復(fù)制一份到cpu緩存內(nèi)开镣,讀取。保證讀取得是最新的值咽扇。

synchronized和volatile作用的異同
當(dāng)使用synchronized加鎖的方式邪财,也可以實(shí)現(xiàn)多線(xiàn)程下可見(jiàn)性陕壹。還能保證寫(xiě)入的原子性。
但是volatile不能保證多線(xiàn)程下操作的原子性树埠。如下面例子

public class Test {
    public volatile int inc = 0;
     
    public void increase() {
        inc++;
    }
     
    public static void main(String[] args) {
        final Test test = new Test();
        for(int i=0;i<10;i++){
            new Thread(){
                public void run() {
                    for(int j=0;j<1000;j++)
                        test.increase();
                };
            }.start();
        }
         
        while(Thread.activeCount()>1)  //保證前面的線(xiàn)程都執(zhí)行完
            Thread.yield();
        System.out.println(test.inc);
    }
}

要保證操作的原子性糠馆,處理synchronized關(guān)鍵字和lock外,還可以使用concurrent包下的AtomicInteger原子操作類(lèi)怎憋,原來(lái)是利用硬件的原子操作指令cap又碌。

volatile使用場(chǎng)景

volatile boolean inited = false;
//線(xiàn)程1:
context = loadContext();  
inited = true;            
 
//線(xiàn)程2:
while(!inited ){
sleep()
}
doSomethingwithconfig(context);

不使用volatile,會(huì)有概率出錯(cuò)绊袋。
沒(méi)有使用鎖是因?yàn)楸显龋瑅olatile性能更高。

參考:http://www.cnblogs.com/dolphin0520/p/3920373.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末癌别,一起剝皮案震驚了整個(gè)濱河市皂岔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌展姐,老刑警劉巖躁垛,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異诞仓,居然都是意外死亡缤苫,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)墅拭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)活玲,“玉大人,你說(shuō)我怎么就攤上這事谍婉∈婧叮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵穗熬,是天一觀的道長(zhǎng)镀迂。 經(jīng)常有香客問(wèn)我,道長(zhǎng)唤蔗,這世上最難降的妖魔是什么探遵? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮妓柜,結(jié)果婚禮上箱季,老公的妹妹穿的比我還像新娘。我一直安慰自己棍掐,他們只是感情好藏雏,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著作煌,像睡著了一般掘殴。 火紅的嫁衣襯著肌膚如雪赚瘦。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天奏寨,我揣著相機(jī)與錄音理澎,去河邊找鬼真慢。 笑死禾蚕,一個(gè)胖子當(dāng)著我的面吹牛薄料,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仍源,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼心褐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了笼踩?” 一聲冷哼從身側(cè)響起逗爹,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嚎于,沒(méi)想到半個(gè)月后掘而,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡于购,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年袍睡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肋僧。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡斑胜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嫌吠,到底是詐尸還是另有隱情止潘,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布辫诅,位于F島的核電站凭戴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏炕矮。R本人自食惡果不足惜么夫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肤视。 院中可真熱鬧魏割,春花似錦、人聲如沸钢颂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)殊鞭。三九已至遭垛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間操灿,已是汗流浹背锯仪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留趾盐,地道東北人庶喜。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像救鲤,于是被迫代替她去往敵國(guó)和親久窟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容