摘要:中間緩存變量,在看面試寶典時(shí),看到面試?yán)},關(guān)于緩存變量,一直一臉茫然,查了部分資料,在這里和大家分享一下。題目輸出結(jié)果居然是在這里,就涉及到所謂的中的中間緩存變量了。
Java中間緩存變量,在看《Java面試寶典》時(shí),看到面試?yán)},關(guān)于Java緩存變量,一直一臉茫然,查了部分資料,在這里和大家分享一下。
public class Test { public static void main(String[] args) { int j = 0; for (int i =0; i<100; i++) { j = j++; } System.out.println(j++); } }
輸出結(jié)果居然是 0
在這里,就涉及到所謂的Java中的中間緩存變量了。在Java中(其他的語言不了解),當(dāng)進(jìn)行自增(或自減)運(yùn)算時(shí),Java會對運(yùn)算的變量進(jìn)行臨時(shí)緩存。
例如:
j = 0; j = j ++; 就可以分解成: temp = j = 0; //由于自增在后,所以,先進(jìn)行臨時(shí)變量緩存 j = j + 1; // j ++ 運(yùn)算 ,緩存變量后,進(jìn)行運(yùn)算自增 j = temp; // 將緩存變量賦值給 j
可以這么理解,也就是, j = j++運(yùn)算的時(shí)候 ,先進(jìn)行左邊的運(yùn)算,然后再進(jìn)行賦值,思路是這樣的。
然后,當(dāng)左邊進(jìn)行了兩個運(yùn)算,第一步是利用中間緩存變量,緩存 j 的初始值,也就是0, 第二部,是給j的變量自增為1, 因?yàn)檫@是兩步,右邊的自增是在 是后運(yùn)算,所以當(dāng)進(jìn)行給左邊賦值的時(shí)候,就行使用初始值,也就是臨時(shí)緩存變量賦值,而自增的結(jié)果就會被拋棄。以上是個人總結(jié)后認(rèn)為比較好理解的地方,如有其他意見,還請交流指出,謝謝!
具體參考地址:http://blog.csdn.net/u0112634...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/70488.html
摘要:物理計(jì)算機(jī)并發(fā)問題在介紹內(nèi)存模型之前,先簡單了解下物理計(jì)算機(jī)中的并發(fā)問題。基于高速緩存的存儲交互引入一個新的問題緩存一致性。寫入作用于主內(nèi)存變量,把操作從工作內(nèi)存中得到的變量值放入主內(nèi)存的變量中。 物理計(jì)算機(jī)并發(fā)問題 在介紹Java內(nèi)存模型之前,先簡單了解下物理計(jì)算機(jī)中的并發(fā)問題。由于處理器的與存儲設(shè)置的運(yùn)算速度有幾個數(shù)量級的差距,所以現(xiàn)代計(jì)算機(jī)加入一層讀寫速度盡可能接近處理器的高速緩...
摘要:內(nèi)存模型即,簡稱,其規(guī)范了虛擬機(jī)與計(jì)算機(jī)內(nèi)存時(shí)如何協(xié)同工作的,規(guī)定了一個線程如何和何時(shí)看到其他線程修改過的值,以及在必須時(shí),如何同步訪問共享變量。內(nèi)存模型要求調(diào)用棧和本地變量存放在線程棧上,對象存放在堆上。 Java內(nèi)存模型即Java Memory Model,簡稱JMM,其規(guī)范了Java虛擬機(jī)與計(jì)算機(jī)內(nèi)存時(shí)如何協(xié)同工作的,規(guī)定了一個線程如何和何時(shí)看到其他線程修改過的值,以及在必須時(shí),...
摘要:并發(fā)編程的核心是為了提高電腦資源的利用率,因?yàn)楝F(xiàn)代操作系統(tǒng)都是多核的,可以同時(shí)跑多個線程。合理配置線程池,密集型任務(wù)配置少數(shù)線程池如個數(shù),密集型任務(wù)配置多一點(diǎn)的線程池如個數(shù),其次是使用有界隊(duì)列即使發(fā)現(xiàn)錯誤。 并發(fā)編程的核心是為了提高電腦資源的利用率,因?yàn)楝F(xiàn)代操作系統(tǒng)都是多核的,可以同時(shí)跑多個線程。那么是不是線程越多越好? 由于線程的切換涉及上下文的切換,所謂上下文就是線程運(yùn)行時(shí)需要的資...
摘要:內(nèi)存模型對內(nèi)存模型的介紹對內(nèi)存模型的結(jié)構(gòu)圖的線程之間的通信是通過共享內(nèi)存的方式進(jìn)行隱式通信,即線程把某狀態(tài)寫入主內(nèi)存中的共享變量,線程讀取的值,這樣就完成了通信。 Java內(nèi)存模型(JMM) 1.對內(nèi)存模型的介紹 ①對Java內(nèi)存模型的結(jié)構(gòu)圖 java的線程之間的通信是通過共享內(nèi)存的方式進(jìn)行隱式通信,即線程A把某狀態(tài)寫入主內(nèi)存中的共享變量X,線程B讀取X的值,這樣就完成了通信。是一種...
摘要:此時(shí),就出現(xiàn)了線程不安全問題了。因?yàn)榈某跏贾禃且虼耍嘏判蚴怯锌赡軐?dǎo)致線程安全問題的。真的能完全保證一個變量的線程安全嗎我們通過上面的講解,發(fā)現(xiàn)關(guān)鍵字還是挺有用的,不但能夠保證變量的可見性,還能保證代碼的有序性。 對于volatile這個關(guān)鍵字,相信很多朋友都聽說過,甚至使用過,這個關(guān)鍵字雖然字面上理解起來比較簡單,但是要用好起來卻不是一件容易的事。 這篇文章將從多個方面來講解vol...
閱讀 2688·2023-04-25 20:19
閱讀 1950·2021-11-24 09:38
閱讀 1639·2021-11-16 11:44
閱讀 4368·2021-09-02 15:40
閱讀 1355·2019-08-30 15:55
閱讀 2027·2019-08-30 15:52
閱讀 3767·2019-08-29 17:20
閱讀 2274·2019-08-29 13:48