那些說加synchronized關(guān)鍵字也出現(xiàn)0的,是沒仔細(xì)聽老師講吧!人家也說了這種情況,這種情況是線程的執(zhí)行順序引起的(這種情況下是符合可見性的),不是線程的交叉執(zhí)行引起的!
2019-04-02
其實(shí)我們都在關(guān)注0和6 的結(jié)果,看到synchronized的時(shí)候我們的第一反應(yīng)都是關(guān)注加入synchronized之后結(jié)果為6才對(duì),但是其實(shí)這里本身并不滿足同步,結(jié)果0和6應(yīng)該都是對(duì)的。(如果不sleep的時(shí)候)這一章的標(biāo)題也是synchronized實(shí)現(xiàn)可見性,換句話說應(yīng)該是不出現(xiàn)3的結(jié)果才對(duì)。這是我的理解
2019-03-24
真的講的非常棒,原先只知道怎么用,現(xiàn)在真的理解了 運(yùn)行原理
2019-02-08
感謝老師的講解。我想提一點(diǎn)建議,我覺得這門課理論偏多,代碼實(shí)踐過少了。我理解起來沒那么深入,更多的是停留在理論階段。希望能多一點(diǎn)代碼的實(shí)踐分析。
2019-02-03
老師講的是真好,給老師瘋狂打call,特別是主內(nèi)存 跟 工作內(nèi)存的圖,看完之后對(duì)synchronized的機(jī)制理解 加深了
2018-12-02
經(jīng)驗(yàn)證 加了 synchronized 之后還是出現(xiàn)0。再仔細(xì)看了下代碼,read()方法里的輸出是在if 外面,只要是讀方法先執(zhí)行,ready = false;然后執(zhí)行輸出,reult = 0; 都是初始值。哈哈,例子沒找好。
2018-11-20
個(gè)人理解:不加volatile的普通變量不具有這個(gè)效果,比如線程對(duì)工作變量修改完之后,不會(huì)百分百對(duì)主內(nèi)存也修改,有可能改完自己工作變量后休眠了,一直不去對(duì)主內(nèi)存中的變量進(jìn)行修改。但是線程對(duì)volatile變量會(huì)綁定對(duì)主內(nèi)存變量也修改的操作,也可以說對(duì)volatile變量的修改 有一個(gè) “對(duì)自己工作區(qū)變量修改并且綁定了一個(gè)對(duì)主內(nèi)存變量修改”的原子性的操作。
2018-08-30
個(gè)人一個(gè)比較淺顯的理解就是:
synchronized就是互斥鎖,實(shí)現(xiàn)底層就是總線鎖,當(dāng)一個(gè)線程獲得該鎖時(shí),其他線程就會(huì)進(jìn)入阻塞狀態(tài),從而不能進(jìn)行操作。
而volatile則不同,它有點(diǎn)像緩存鎖,但是又不像鎖。volatile變量在執(zhí)行寫操作時(shí),會(huì)加入store的屏障指令,我的理解是這時(shí)其他線程不能能對(duì)該共享變量做出任何操作,但是可以操作其他共享變量。這時(shí)volatile的開銷就比synchronized小。
synchronized就是互斥鎖,實(shí)現(xiàn)底層就是總線鎖,當(dāng)一個(gè)線程獲得該鎖時(shí),其他線程就會(huì)進(jìn)入阻塞狀態(tài),從而不能進(jìn)行操作。
而volatile則不同,它有點(diǎn)像緩存鎖,但是又不像鎖。volatile變量在執(zhí)行寫操作時(shí),會(huì)加入store的屏障指令,我的理解是這時(shí)其他線程不能能對(duì)該共享變量做出任何操作,但是可以操作其他共享變量。這時(shí)volatile的開銷就比synchronized小。
2018-08-14