number++ 加sleep 本質(zhì)上應(yīng)該是線程安全問(wèn)題,而不能說(shuō)明原子性
2017-07-25
樓上的同學(xué),我一開始也是這樣的想法,然后我百度了一篇2016-06-19的原創(chuàng)博文,里面有這樣一段補(bǔ)充:
(2)補(bǔ)充1
共享數(shù)據(jù)的訪問(wèn)權(quán)限都必須定義為private。一般是考慮安全性,對(duì)數(shù)據(jù)提供保護(hù),可以通過(guò)set()方法賦值,再通過(guò)get()方法取值,這就是java封裝的思想。
Java中對(duì)共享數(shù)據(jù)操作的并發(fā)控制是采用加鎖技術(shù)。
Java中沒(méi)有提供檢測(cè)與避免死鎖的專門機(jī)制,但應(yīng)用程序員可以采用某些策略防止死鎖的發(fā)生。
final也可以保證內(nèi)存可見性。
博文的內(nèi)容和老師講的內(nèi)容幾乎是一樣的,不知道是不是同一個(gè)人
(2)補(bǔ)充1
共享數(shù)據(jù)的訪問(wèn)權(quán)限都必須定義為private。一般是考慮安全性,對(duì)數(shù)據(jù)提供保護(hù),可以通過(guò)set()方法賦值,再通過(guò)get()方法取值,這就是java封裝的思想。
Java中對(duì)共享數(shù)據(jù)操作的并發(fā)控制是采用加鎖技術(shù)。
Java中沒(méi)有提供檢測(cè)與避免死鎖的專門機(jī)制,但應(yīng)用程序員可以采用某些策略防止死鎖的發(fā)生。
final也可以保證內(nèi)存可見性。
博文的內(nèi)容和老師講的內(nèi)容幾乎是一樣的,不知道是不是同一個(gè)人
2017-07-15
最贊回答 / 是麥兜啊
while循環(huán)內(nèi)判斷的是所有的子線程是否都運(yùn)行完了,如果是的話,繼續(xù)下面的打印操作。如果不用synchronized或不加鎖,程序運(yùn)行時(shí),有時(shí)候getNumber獲得的值小于500,是因?yàn)関olatile定義的變量不能保證原子性,所以會(huì)出現(xiàn)兩個(gè)線程同時(shí)寫number時(shí),number只增加了1,沒(méi)有增加2,所以影響到number變量最終的值不是500,而是499或498了。
2017-07-07
授人以魚不如授人以漁這句話完美的詮釋了Marton老師,很多視頻只會(huì)告訴你應(yīng)該這樣做而不說(shuō)這樣做的原因?yàn)槭裁匆@樣做。也可能因?yàn)槲矣悬c(diǎn)笨笨的吧
2017-06-29
已采納回答 / Peng_0008
加注釋,多次編譯,多次執(zhí)行。
已采納回答 / 憂傷的帥哥
不管怎么重排序(編譯器和處理器為了提高并行度),(單線程)程序的執(zhí)行結(jié)果不能被改變。java內(nèi)存中的變量都有指針引用,上下文引用成鏈,這個(gè)鏈?zhǔn)遣粫?huì)被打亂重排序的,只有沒(méi)有數(shù)據(jù)依賴關(guān)系的代碼,才會(huì)被沖排序,所以在單線程內(nèi)部重排序不會(huì)改變程序運(yùn)行結(jié)果,這就是as-if-serial
2017-06-22