我在處理Singleton對象和併發調用事件時遇到了一些非常特殊的情況。方法局部變量存儲在哪裏?
我知道還有其他一些問題與我的相關,但他們不是我想知道的。 (例如:Concurrently invoking Java method of singleton object)
例如說我有以下代碼:
public class MyClass{
private static MyClass myInstance = new MyClass();
private new MyClass() {}
public MyClass getInstance(){
return myInstance;
}
public String doSomething(String message){
java.util.Date d = new java.util.Date();
System.out.println(message);
System.out.println("Today is: " + d);
}
}
在併發場景中,我調用這個相同的類的實例很多次,我想知道發生了什麼日期d
變量,內存明智,它會被存儲在不同的內存堆棧,每個人調用getInstance()。doSomething()?
在我的理解,因爲類實例是靜態的,但它沒有可變的全局變量聲明它應該爲不同的進程創建單獨的d
對象,根本沒有併發問題。
有人能澄清這部分?
'Singleton'和'object'與這個問題無關。你問的是Java把局部變量放在哪裏,答案是'在線程棧上'。 – EJP