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

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

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

難度中級
時長57分
學習人數
綜合評分9.63
181人評價 查看評價
9.9 內容實用
9.6 簡潔易懂
9.4 邏輯清晰

已采納回答 / Peng_0008
加注釋,多次編譯,多次執行。

已采納回答 / 憂傷的帥哥
不管怎么重排序(編譯器和處理器為了提高并行度),(單線程)程序的執行結果不能被改變。java內存中的變量都有指針引用,上下文引用成鏈,這個鏈是不會被打亂重排序的,只有沒有數據依賴關系的代碼,才會被沖排序,所以在單線程內部重排序不會改變程序運行結果,這就是as-if-serial

最新回答 / tanyaping2015
應該加上synchronized(this),而不是為方法加synchronized

最新回答 / 慕移動9181930
嗯嗯這個可以有^_^...用框架吧還是,如果實在不想用,自己可為ie8及以下寫一個類似方法來模擬getElementsByClassName()

最贊回答 / ricklove
你根本就不理解。。這個volitate,只對單個操作有效,對i++ 或者其他多步的操作,根本保證不了線程安全

最新回答 / doubleC丶
idea正常運行會起兩個線程,debug會起一個線程

最贊回答 / RobinYGH
olatile本質是在告訴jvm當前變量在寄存器中的值是不確定的,需要從主存中讀取,synchronized則是鎖定當前變量,只有當前線程可以訪問該變量,其他線程被阻塞住.volatile僅能使用在變量級別,synchronized則可以使用在變量,方法.volatile僅能實現變量的修改可見性,但不具備原子特性,而synchronized則可以保證變量的修改可見性和原子性.volatile不會造成線程的阻塞,而synchronized可能會造成線程的阻塞.volatile標記的變量不會被編譯器優化,而s...

已采納回答 / zvc888
每個線程都有一個自己的內存空間,當線程啟動的時候把變量從共享內存拷貝一份到私有內存,在這個變量更改后,需要push到共享內存,其他線程才能讀取到變量新的值;

最新回答 / 絕望中進擊的蝸牛
volatile只能保證代碼的可見性,而不能保證代碼的原子性。所以,當代碼包含其他共享變量時,如果被其他線程執行,那么值就會發生改變。
課程須知
學習本課程前,你需要熟練掌握Java的基礎語法,熟悉Java多線程的基礎知識,以及synchronized實現線程同步的方法。
老師告訴你能學到什么?
1、內存可見性 2、指令重排序 3、as-if-serial語義 4、synchronized實現可見性 5、volatile實現可見性

微信掃碼,參與3人拼團

微信客服

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

幫助反饋 APP下載

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

公眾號

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

友情提示:

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

本次提問將花費2個積分

你的積分不足,無法發表

為什么扣積分?

本次提問將花費2個積分

繼續發表請點擊 "確定"

為什么扣積分?

舉報

0/150
提交
取消