关于线程的问题,求大神指点

Rodream 2013-08-18 09:55:42
为什么我在构造时传递的名字没有反应,打印出来的名字还是Thread0和Thread1
而不是one和two
能说明原因吗?
class thread extends Thread
{
private String name;
thread(String name)
{
this.name=name;
}
public void run()
{
for(int a=0;a<60;a++)
{
System.out.println(this.getName()+""+a);
}
}
}
class day1106
{
public static void main(String[]args)
{
thread t=new thread("one----");
thread t1=new thread("two===");
t.start();
t1.start();
}
}
...全文
288 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaofuqi 2013-08-18
  • 打赏
  • 举报
回复
首先Thread的name是private是,是无法继承的,你在thread设置的name只是thread类的name属性值而不是父类Thread的属性name的值,而你在getName获取的是父类的属性name的值,在构造方法里面把name的值也传进去就可以了,如下:

thread(String name)
{
   super(name);
   this.name=name;
}
2013-08-18
  • 打赏
  • 举报
回复
因为你在你的类里定义的name,并不是该线程类的名字,而是你定义的一个以name为变量名的字符串成员变量。 而对于线程类来说,他本身存在一个name的,而且该name是一个字符数组。 你的程序在执行 thread t=new thread("one----"); thread t1=new thread("two==="); 这两行代码的时候,并没有把对应的字符串赋值给线程类Thread的name字符数组。 而只是将其赋值给你自己定义的一个name成员。 而你继承过来的getName()方法。 子类和父类具有相同名字的成员会如何处理,我也不大清楚。不过你的问题应该就是出在这里了。
风程序 2013-08-18
  • 打赏
  • 举报
回复

class thread extends Thread
{
private String name;
thread(String name)
{
	super(name);
}
public void run()
{
for(int a=0;a<60;a++)
{
System.out.println(this.getName()+""+a);
}
}
}
class Demo12
{
public static void main(String[]args)
{
thread t=new thread("one----");
thread t1=new thread("two===");
t.start();
t1.start();
}
}
因为你没有把name赋给Thread,你在构造函数 里面调用父类的函数就可以啦。。。。我已经帮你改好了

62,621

社区成员

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

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