形參是方法的引數,用來接收實際引數。在方法被呼叫時,虛擬機會分配記憶體單元,方法結束時,會釋放所分配的記憶體單元。
引來的問題:方法內的物件經過方法初始化並沒有初始化,但是實體物件的屬性又可以被set方法進行賦值,原因物件的屬性都是成員變數。set方法會把傳遞過來的引數賦值給成員變數,所以成員變數的值可以改變。
但是成員變數在多執行緒的環境下會將該值複製乙份到每個執行緒,之所以複製是由於jvm仿照計算機的記憶體模型在多執行緒執行的時候會將變數的值複製到每個執行緒的工作空間,這個時候就帶來乙個問題可能最終的結果跟預期的結果不一樣,這就是併發問題。為了防止這個問題 在變數上面加上volatile 進行修飾,使不同的執行緒都感知該變數,但是不能保證變數的復合操(比如i++)作在其他執行緒也能感知到。為了保證變數可以進行復合操作又可以進行細粒度的操作cas(樂觀鎖,又稱為無鎖程式設計)每次對共享變數進行操作的時候會與主記憶體該變數相比較,如果其他執行緒沒有更新過則更新,如果更新過則拿到主記憶體該變數的值進行重新計算(這一過程又稱為自旋)。
所以在靜態方法沒有對成員變數、全域性變數進行修改操作的時候是不會產生併發問題的。
為什麼使用多執行緒?
提高cpu的使用率,cpu的計算速度高於記憶體,記憶體的操作速度又高於硬碟
docker也是能提高計算機的使用率,從而降低公司成本,我記得有乙個從某東出來的人說他們公司有上千臺伺服器每個伺服器執行了n個docker。每個docker裡又有n個服務。
使用多執行緒開發確實會大大提高速度,但是會提高程式的複雜性。我估計我寫的**別人不好一眼看明白。
形參和實參
函式的引數分為形參和實參兩種。形參 出現在函式定義中,在整個 函式體內都可以使用,離開該函式則不能使用。實參出現在主調函式中,進入被調函式後,實參變數也不能使用。形參和實參的功能是作 資料傳送 發生函式呼叫 時,主調函式把實參的值傳送給被調函式的形參從而實現主調函式向被調函式的 資料傳送 函式的形參...
形參和實參
形參 全稱為 形式引數 是在定義函式名和函式體的時候使用的引數,目的是用來接收呼叫該函式時傳遞的引數。形參的作用是實現主調函式與被調函式之間的聯絡,通常將函式所處理的資料,影響函式功能的因素或者函式處理的結果作為形參。沒有形參的函式在形參表的位置應該寫void.main 函式也可以有形參和返回值,其...
形參和實參
形參和實參的區別 1 值傳遞 實參是變數,表示式等值。find int x y find z 上面的例子中,z是實參,x是形參。x變z不變。在值傳遞過程中,實參和形參位於記憶體中兩個不同位址中,實參先自己複製一次拷貝,再把拷貝複製給形參。所以,在值傳遞過程中,形參的變化不會對實參有任何的影響。2 位...