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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

下面這種場景需要使用volatile嗎,我認為是不需要的?

下面這種場景需要使用volatile嗎,我認為是不需要的?

慕桂英546537 2018-07-06 14:34:38
對象A中的成員變量boolean值B初始值為false;對象A被異步線程回調,回調過程中修改A中的B的值為true,并且使用B,此時使用B(這次修改和使用是在同一個線程中的);且只會有這種用法,不會同時有多個線程來修改這個值我認為這種場景時不需要使用volatile的;其實是同一個對象的一個屬性,被兩次調用,第一次設置為false,第二次調用時設置為true,期間進行了一些異步的網絡驗證,驗證完后,回調該對象,設置標志說明已經驗證完了,然后不會再次執行異步網絡驗證,直接順序走下面的邏輯了
查看完整描述

3 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

volatile 這個限定符就是告訴編譯器讀取該變量的值時不要優化,直接讀取原來地址所存取的值.從邏輯上進這樣寫當然更好啦.一般而言,JAVA語言會將一個函數
中多次出現的同一個對象的值盡可能地存放在寄存器中,如果該對象的內容可以放在寄存器中,且寄存器的內容足夠多的話(畢竟寄存器的訪問比讀寫內存要快得多).
但是使用了該限定符后,就會直接讀取該地址的內容,而不是在第一次讀取之后就默認將該值存放在CPU的寄存器.你說這中途進行了一些其他操作,那是否會
與JAVA的默認讀取操作起沖突呢,還是存在可能性的,所以大家都習慣性地用Volatile.畢竟CPU速度那么快,us級別的時間,區別也不是很大

查看完整回答
反對 回復 2018-07-13
?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

不需要。volatile通常用于嵌入式開發中,讀取硬件的寄存器值,此時不期望程序得到的值是緩存值。而是要真實的去硬件里讀取。


查看完整回答
反對 回復 2018-07-13
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

不需要,如果其他線程需要讀取這個值的話就需要。


查看完整回答
反對 回復 2018-07-13
  • 3 回答
  • 0 關注
  • 158 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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