【发布时间】:2016-10-01 19:32:56
【问题描述】:
我了解了方法是如何执行的,这就是我所理解的: 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));
现在当两个线程开始执行时,它们将拥有自己的调用堆栈。
这种情况下共享对象的方法将如何执行?
谢谢
【问题讨论】:
标签: java multithreading callstack