本帖最后由 罗理 于 2013-2-17 00:09 编辑
线程one的代码如下,设置object的name为oneone,然后打印class Threadone extends Thread
{ private TestObject object;
public Threadone(TestObject obj)
{
this.object=obj;
}
public void run()
{
for(int x=0;x<20;x++)
{
object.setName("oneone");
System.out.println(object.getName()+"--------Threadone--"+x);
}
}
}
线程two的代码如下,
class Threadtwo extends Thread
{
private TestObject object;
public Threadtwo(TestObject obj)
{
this.object=obj;
}
public void run()
{
for(int x=0;x<20;x++)
{
object.setName("namechange");
System.out.println(object.getName()+"--------two--"+x);
}
}
}
设置object的name为namechange,然后打印——————————运行的结果如图
我的理解是:首先线程1抢到了cpu资源,执行object.setName("oneone"); 但是还没有执行下一句就被线程2抢到了cpu资源,将object的name改为namechange,然后cpu被线程1抢去,执行System.out.println(object.getName()+"--------Threadone--"+x);所以打印的是namechange————threadone———0,然后线程1进行执行for循环打印出x为1和2.随后线程2得到cpu,执行了System.out.println(object.getName()+"--------two--"+x); 打印的是namechange————two——0;——————————————————我要问的是————在打印出namechange————threadone———0 时 显然线程1的object.setName("oneone"); 这一段有被执行到,同时线程1的x值为0,当线程1再次获得cpu时不是for循环重新执行一遍而是继续往下执行。那么,看上图第四行运行结果namechange——————two—-0;这项结果显示线程2执行System.out.println(object.getName()+"--------two--"+x);代码,x值为0表示还是进行的第一次循环,但是线程2的第一次for循环中的objcet.setName("namechange");早就被执行掉了,现在却把namechange打印出来————这里表示不理解,求高人指点
|