我在处理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