黑马程序员技术交流社区

标题: 新人第一问,关于多线程的 [打印本页]

作者: 罗理    时间: 2013-2-16 22:40
标题: 新人第一问,关于多线程的
本帖最后由 罗理 于 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打印出来————这里表示不理解,求高人指点

作者: 胥文    时间: 2013-2-16 23:53
在视频里面毕老师有说过(第十一天,07)
这是由于你的电脑是双核的,你的第四行已经读完但是还没来的及打印
如果是电脑是单核的就不会有这个问题
作者: 罗理    时间: 2013-2-17 00:06
谢谢!!!!!!!!!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2