我读到了如何执行方法,这就是我的理解: 1)方法在方法区中分配内存,并且只维护一个副本,该副本在类的所有实例中使用。 2) 当从实例调用方法时,当前线程(单线程环境)会加载 main,然后加载通过实例调用的方法,例如:
main(String ags[])
{
A a = new A();
a.method();
}
// code of method
method()
{
for(int i=0;i<25;i++)
system.out.println(i);
}
因此对于这个线程来说,它有自己的调用堆栈,然后在方法调用时,相同的方法体及其局部变量被推送到主方法上方的同一堆栈上。
现在基于上述理解,我不明白的是,在多线程环境中,如果我运行两个线程,相同的代码将如何表现 并且两者共享同一个实例。例如:
//My run method for myRunnable
run()
{
a.method();
}
Thread one = new Thread(new myRunnable(a)); // object from above
Thread two= new Thread(new myRunnable(a));
现在,当两个线程开始执行时,它们将拥有自己的调用堆栈。
这种情况下共享对象的方法将如何执行?
谢谢
最佳答案
1) 方法在方法区中分配内存,并且只维护一个副本,该副本在该类的所有实例中使用>>,这意味着方法实现的字节码对于所有实例来说只有一个。并且方法字节码内存区域与对象的堆是分开的。
当然,每个线程都有自己的堆栈,就像您所解释的那样。
关于java - java类方法在单线程和多线程环境下如何分配内存并执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37585484/