課程
/后端開發
/Java
/細說Java多線程之內存可見性
為什么VolatileDemo要加final修飾?
2016-05-23
源自:細說Java多線程之內存可見性 4-2
正在回答
因為生命周期的原因。方法中的局部變量,方法結束后這個變量就要釋放掉,final保證這個變量始終指向一個對象。首先,內部類和外部類其實是處于同一個級別,內部類不會因為定義在方法中就會隨著方法的執行完畢而跟隨者被銷毀。問題就來了,如果外部類的方法中的變量不定義final,那么當外部類方法執行完畢的時候,這個局部變量肯定也就被GC了,然而內部類的某個方法還沒有執行完,這個時候他所引用的外部變量已經找不到了。如果定義為final,Java會將這個變量復制一份作為成員變量內置于內部類中,這樣的話,由于final所修飾的值始終無法改變,所以這個變量所指向的內存區域就不會變。
檸檬醬c
客氣,共同學習么。。、
懂了,謝謝大神! ^_^
舉報
用兩種方式實現內存可見性,代領大家深層次學習Java中的內存
2 回答java多線程中共享變量是不是一定要private修飾?
9 回答不是說volatile不保證原子性嗎?為什么對于64位類型的變量用volatile修飾?
2 回答final的作用
1 回答volatile 加不加線程都可以訪問啊,這是為什么?
5 回答被synchronized修飾,依然出現兩種結果0和6,是我代碼寫得有問題?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-05-24
因為生命周期的原因。方法中的局部變量,方法結束后這個變量就要釋放掉,final保證這個變量始終指向一個對象。
首先,內部類和外部類其實是處于同一個級別,內部類不會因為定義在方法中就會隨著方法的執行完畢而跟隨者被銷毀。問題就來了,如果外部類的方法中的變量不定義final,那么當外部類方法執行完畢的時候,這個局部變量肯定也就被GC了,然而內部類的某個方法還沒有執行完,這個時候他所引用的外部變量已經找不到了。如果定義為final,Java會將這個變量復制一份作為成員變量內置于內部類中,這樣的話,由于final所修飾的值始終無法改變,所以這個變量所指向的內存區域就不會變。
2016-06-23
客氣,共同學習么。。、
2016-05-26
懂了,謝謝大神! ^_^