黑马程序员技术交流社区

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

作者: 杨翔    时间: 2013-1-14 21:50
标题: 关于线程名称的一点疑问
本帖最后由 杨翔 于 2013-1-15 22:34 编辑

在看线程课程视频的初期看到的,感觉很奇怪,我用this.name = name; 已经把名称赋给对象了啊,但是当我用 对象.getName 想在打印的时候显示我自定义的名称是不成功的,而是用super调用父类的setName方法就是可以成功的?我想不通的是 对象.getName不是调用的是对象的名称属性么,为什么非得用setName设置了名称,才能打印出自定义的名称呢
  1. class Demo extends Thread
  2. {
  3.    private String name;
  4.    Demo(String name)
  5.    {
  6.       this.name = name; //此处将自定义的名称赋给调用此方法的对象
  7.       //super(name);  用此方法就可以在打印时显示自定义的名称
  8.    }
  9.    public void run()
  10.    {
  11.       for(int i=0; i<60; i++)
  12.       {
  13.          System.out.println(this.getName() + "demo run------" + i);        
  14.       }        
  15.            
  16.    }        
  17. }

  18. class ThreadDemo
  19. {
  20.    public static void main(String[] args)
  21.    {
  22.       Demo d = new Demo("haha");  //将name传入构造函数
  23.       d.start();
  24.       
  25.       Demo h = new Demo("hiahia");
  26.       h.start();
  27.             
  28.              for(int x=0; x<60; x++)
  29.              {
  30.                 System.out.println("hello world------" + x);        
  31.              }
  32.    }        
  33. }
复制代码

作者: 王溢君    时间: 2013-1-14 22:12
本帖最后由 luck28 于 2013-1-14 22:35 编辑

private String name;

name只是Demo的一个成员属性,不是它的线程名字。

这句话改成这样this.name,就可以获取你要的结果。
System.out.println(this.name + "demo run------" + i);
作者: 柴乔军    时间: 2013-1-15 00:53
Thread

public Thread(String name)
分配新的 Thread 对象。这种构造方法与 Thread(null, null, name) 具有相同的作用。
参数:
name - 新线程的名称。
楼主你的this.name = name ;只是给你自己定义的类中的局部变量private String name;赋了值,并没有给线程赋值name,而在构造方法中super(...)
调用了父类Thread的构造方法,如上,传递的参数是该线程的名称,所以super(..)可以给线程设置名称,自然也可以用getName()方法取得




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