黑马程序员技术交流社区
标题:
关于多线程
[打印本页]
作者:
胡威
时间:
2012-1-3 19:10
标题:
关于多线程
class Demo implements Runnable
{
public void run()
{
for(int x=0;x<70;x++)
{
System.out.println(Thread.currentThread().getName()+“......”+x)
}
}
}
class JoinDemo
{
public static void main(String[] args)
{
Demo d=new Demo();
Thread t1=new Thread(d);
Thread t2=new Thread(d);
}
t1.start();
t1.start();
}
打印结果为Thread-0.....0
Thread-1.....0等等
问:为什么两个线程会打印一样的x值呢?只有一个Demo对象,也就只有一个run方法啊,两个线程运行的难道不是同一个方法吗?
作者:
胡威
时间:
2012-1-3 19:16
追问:一个非静态方法加载进内存的时间
1.对象一建立方法就被加载进内存中的方法区
2.对象调用方法的时候,方法就被加载进方法区,用完就释放
请确认后再回答
作者:
为梦而战
时间:
2012-1-3 19:28
本帖最后由 为梦而战 于 2012-1-3 19:30 编辑
是你的代码写的有问题!你t1.start();t2.start();写到主函数里边去才对。你写了两个t1.start().且都不在主函数里。再一个你上面的那个"……",我看着好像一边是英语符,一边是中文符,你改一下就可以了,我改了后运行成功!
作者:
王文龙
时间:
2012-1-3 20:56
哈哈,楼上正确哦!
Thread被创建后应该是一起写在主函数中的啊,怎么还跑出去了呢??
作者:
胡威
时间:
2012-1-4 08:23
谢谢指正,不过这个不是关键,这是我往这个网页上写时写错了,原代码写的是正确的,就是毕老师的视频中讲的。麻烦再看看我提出的问题
作者:
刘基军
时间:
2012-1-4 09:41
个人认为是:
-----2.对象调用方法的时候,方法就被加载进方法区,用完就释放。
共享数据使用静态修饰:static int x=70;
【下面的代码没有同步,还需完善,仅为显示效果使用】
class Demo implements Runnable
{
static int x=70;
public void run()
{
while(x>=0)
{
System.out.println(Thread.currentThread().getName()+"......"+x);
x--;
}
}
}
class JoinDemo
{
public static void main(String[] args)
{
Demo d=new Demo();
Thread t1=new Thread(d);
Thread t2=new Thread(d);
t1.start();
t2.start();
}
}
复制代码
作者:
胡威
时间:
2012-1-5 09:19
你这里的x是成员变量,本来就只有一个对象,没有必要static把,我上面的代码里x是局部变量,应该不一样把
作者:
刘基军
时间:
2012-1-5 09:37
胡威 发表于 2012-1-5 09:19
你这里的x是成员变量,本来就只有一个对象,没有必要static把,我上面的代码里x是局部变量,应该不一样把 ...
恩,你讲得对,static可以不用,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2