亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

細說Java多線程之內存可見性

難度中級
時長57分
學習人數
綜合評分9.63
181人評價 查看評價
9.9 內容實用
9.6 簡潔易懂
9.4 邏輯清晰
number++ 加sleep 本質上應該是線程安全問題,而不能說明原子性
3-4為什么是6的原因似乎將錯了,因為println()方法帶有synchronized所以可見
樓上的同學,我一開始也是這樣的想法,然后我百度了一篇2016-06-19的原創博文,里面有這樣一段補充:
(2)補充1
共享數據的訪問權限都必須定義為private。一般是考慮安全性,對數據提供保護,可以通過set()方法賦值,再通過get()方法取值,這就是java封裝的思想。
Java中對共享數據操作的并發控制是采用加鎖技術。
Java中沒有提供檢測與避免死鎖的專門機制,但應用程序員可以采用某些策略防止死鎖的發生。
final也可以保證內存可見性。
博文的內容和老師講的內容幾乎是一樣的,不知道是不是同一個人

最贊回答 / 是麥兜啊
while循環內判斷的是所有的子線程是否都運行完了,如果是的話,繼續下面的打印操作。如果不用synchronized或不加鎖,程序運行時,有時候getNumber獲得的值小于500,是因為volatile定義的變量不能保證原子性,所以會出現兩個線程同時寫number時,number只增加了1,沒有增加2,所以影響到number變量最終的值不是500,而是499或498了。
授人以魚不如授人以漁這句話完美的詮釋了Marton老師,很多視頻只會告訴你應該這樣做而不說這樣做的原因為什么要這樣做。也可能因為我有點笨笨的吧
點個贊給老師

已采納回答 / Peng_0008
加注釋,多次編譯,多次執行。
老師好厲害,講的這不錯,謝謝老師

已采納回答 / 憂傷的帥哥
不管怎么重排序(編譯器和處理器為了提高并行度),(單線程)程序的執行結果不能被改變。java內存中的變量都有指針引用,上下文引用成鏈,這個鏈是不會被打亂重排序的,只有沒有數據依賴關系的代碼,才會被沖排序,所以在單線程內部重排序不會改變程序運行結果,這就是as-if-serial
感謝老師,課講得生動、形象。
不變式是啥玩意
為我面試加分,謝謝老師
jls666
課程須知
學習本課程前,你需要熟練掌握Java的基礎語法,熟悉Java多線程的基礎知識,以及synchronized實現線程同步的方法。
老師告訴你能學到什么?
1、內存可見性 2、指令重排序 3、as-if-serial語義 4、synchronized實現可見性 5、volatile實現可見性

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!

本次提問將花費2個積分

你的積分不足,無法發表

為什么扣積分?

本次提問將花費2個積分

繼續發表請點擊 "確定"

為什么扣積分?

舉報

0/150
提交
取消