问个线程问题~主线程与自创的线程

Jo_Cai 2008-12-20 11:56:00
代码如下
public class Machine extends Thread{
private int a=0;
public void run(){
for(a=0;a<10;a++){
System.out.println(currentThread().getName()+":"+a);
try{
sleep(100);
}catch(InterruptedException e){throw new RuntimeException(e);}
}
}
public static void main(String args[]){
Machine machine=new Machine();
machine.start();
machine.run();
}
}
运行结果是:
main:0
Thread-0:0//为什么出现两次0了???
main:1
Thread-0:2
main:3
Thread-0:4
main:5
Thread-0:6
main:7
Thread-0:8
main:9

疑问就是:为什么会出现两次0,不是两个线程都同时操作同一个实例变量吗?
...全文
47 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
一头头 2008-12-21
  • 打赏
  • 举报
回复
thread safty?
Jo_Cai 2008-12-21
  • 打赏
  • 举报
回复
感谢楼上详细的解析~
哈哈,看来是我想的不够细致
gesanri 2008-12-21
  • 打赏
  • 举报
回复
由于machine.start()要调用run方法,这需要时间,而machine.run()直接调用run方法,所以它先执行,即主线程main先将a赋值为0并打印出main:0,接着,主线程sleep0.1秒,这时轮到machine.start()调用run方法,又执行一次a=0,所以打印出Thread-0:0,完后它再sleep0.1秒,再接着主线程醒来,a++,输出main:1,再另一个线程醒来,a++,输出Thread-0:2,依次循环,直到a=9,输出main:9

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧