黑马程序员技术交流社区
标题:
代码练习,结果为什么是1
[打印本页]
作者:
祁振朋
时间:
2013-3-21 17:32
标题:
代码练习,结果为什么是1
本帖最后由 祁振朋 于 2013-3-21 17:56 编辑
class ThreadDemo9
{
public static void main(String[] args)
{ int i=2;
A a=new A();
new Thread (a).start();
int j=a.i;
System.out.print(j);
}
}
class A implements Runnable
{
public int i=1;
public void run(){
this.i=10;
}
}
复制代码
结果为什么是1?
作者:
我手心里的宝
时间:
2013-3-21 17:41
输出结果当然是1
06.new Thread (a).start();
你这句话是创建了一个匿名的线程对象,你只是把a做为参数传了进去,记住java里面所有的都是传值
这个Thread调用了A类的run方法,它会执行你这个run方法里面的代码,但是它不会改变A类里面的值
作者:
陈丽莉
时间:
2013-3-21 17:50
记得及时处理帖子,继续追问;或将帖子分类改成【已解决】~
作者:
祁振朋
时间:
2013-3-21 17:55
谢谢,我明白了
作者:
张世钦
时间:
2013-3-21 23:34
你试着让主线程歇个一秒就得到你想要的结果了.
程序自始至终只有一个对象a,建立的时候它的i=1
当你将它作为参数传递后,run方法运行,使i=10
兄弟自己好好琢磨琢磨
程序执行的很快,一瞬间就完了,那时候a的i值还没有变,就打印了 打印的是1
你让主线程睡一秒,让a的run方法执行完,a的中的i就等于10了
代码如下
class test
{
public static void main(String[] args)throws Exception
{
int i=2;
A a=new A();
new Thread (a).start();
Thread.sleep(1000);//这里让主线程睡一秒,打印的就是10了
int j=a.i;
System.out.print(j);
}
}
class A implements Runnable
{
public int i=1;
public void run(){
this.i=10;
}
}
复制代码
作者:
祁振朋
时间:
2013-3-22 18:23
张世钦 发表于 2013-3-21 23:34
你试着让主线程歇个一秒就得到你想要的结果了.
程序自始至终只有一个对象a,建立的时候它的i=1
谢谢你啊。你解释的太好了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2