黑马程序员技术交流社区

标题: 关于线程名称的疑问 [打印本页]

作者: 周兴华    时间: 2012-8-24 19:26
标题: 关于线程名称的疑问
本帖最后由 周兴华 于 2012-8-24 19:28 编辑

代码如下:
public class ThreadDemo {
public static void main(String[] args){
  Test1 t=new Test1("mythread");
  t.start();
}
}
class Test1 extends Thread{
public void run(){
  for(int i=0;i<50;i++){
   System.out.println(this.getName()+" run"+i+"次");
  }
}
}
在API中Thread类的构造方法中有这么一条:
public Thread(String name)分配新的 Thread 对象。这种构造方法与 Thread(null, null, name) 具有相同的作用。 参数name - 新线程的名称。
问题是如果代码中的 Test1 t=new Test1("mythread");改为 Test1 t=new Test1();就能通过编译,而按照API中的构造方法Thread(String name)去创建Thread对象就不能通过编译,
这是为什么呢?
作者: 刘芮铭    时间: 2012-8-24 20:17
public class ThreadDemo1 {
public static void main(String[] args){
Test1 t=new Test1("mythread"); //你的源程序根本没有Test(String str);这个构造函数,所以每次调用失败!  
t.start();
}
}
class Test1 extends Thread{
Test1(String name) //创建一个String参数的构造方法,用super(name)调用父类的构造方法就可以了
{
  super(name);
}
public void run(){
  for(int i=0;i<50;i++){
   System.out.println(this.getName()+" run"+i+"次");
  }
}
}

作者: 芦曦    时间: 2012-8-25 01:24
你要往Test1里传值,必须的有构造函数。但是你的程序里没有,加上就行了。
作者: 王金科    时间: 2012-8-25 02:12
你没有带参数的Test1构造函数,默认构造函数是不带参数,你当让不能往Test1里面传值
Test1 t=new Test1("mythread");这句肯定是编译不通过的.
而关于Thread(String name)这个.是这么用的
class A implementsRunnable
{
public void run()
{
}
}
在主函数里面开启新的线程
new Thread(new A()).start();
作者: 杨卓儒    时间: 2012-8-25 03:34
必须有public Thread(String name); 这个构造函数才可以使用setName来设置线程名。

然后再构造函数里用super(name)就可以了。。






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