黑马程序员技术交流社区
标题:
新人第一问,关于多线程的
[打印本页]
作者:
罗理
时间:
2013-2-16 22:40
标题:
新人第一问,关于多线程的
本帖最后由 罗理 于 2013-2-17 00:09 编辑
未命名2.jpg
(29.38 KB, 下载次数: 20)
下载附件
2013-2-16 22:10 上传
线程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,然后打印——————————运行的结果如图
未命名.jpg
(20.93 KB, 下载次数: 16)
下载附件
2013-2-16 22:10 上传
我的理解是:首先线程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