浏览 190 次
|
精华帖 (4) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-04-26 关键字: 变量内存分配
在网上查了很多资料,对象的创建的大致过程如下
1.首先为对象分配内存空间,并把成员变量和方法初始化。包括变量和方法,都被复制到属于此数据类型的一个新的实例 2.然后执行显示初始化,即执行在类成员声明时带有的简单赋值表达式 3.执行构造方法,进行对象初始化。 但都没有提到关于方法里局部变量是何时创建和分配内存的 Single.java
public class Single {
public static Single single;
private Single(){
}
public static Single getInstance(){
if(single==null)
{
single=new Single();
}
return single;
}
public void test(){
for(int i=1;i<=10;i++){
if(i%2==0){
for(int k=1;k<=100;k++)
System.out.print("0");
}
System.out.println(""+i);
}
}
}
TestTread.java
public class TestThread extends Thread{
public void run(){
Single.getInstance().test();
}
public static void main(String arg[]){
Thread t1=new TestThread();
Thread t2=new TestThread();
t1.start();
t2.start();
}
}
这里t1和t2两个线程调用的是同一个对象同一个方法,stack中的引用和heap中实际的对象都是一致的。但test()里面的i变量是互不关系的,即t1的线程i改变不会影响t2线程的i。如果说局部变量有多个副本,那么它是如何确定哪个变量是属于哪个线程的? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
| 返回顶楼 | |
|
时间:2008-04-28
建议看看JVM相关的资料,
首先,方法的局部变量的初始化和对象的初始化无关; 其次,某个线程调用方法时,jvm创建新的帧并压入堆栈,方法的本地变量会保存到这个帧里,不同的线程当然帧也是不同的。 |
|
| 返回顶楼 | |


