黑马程序员技术交流社区

标题: 关于多线程命名 [打印本页]

作者: amen0205    时间: 2013-3-6 21:34
标题: 关于多线程命名
本帖最后由 门文通 于 2013-3-8 03:38 编辑
  1. class Test  extends Thread  
  2. {
  3.         private String name;
  4.         Test(String name)
  5.         {
  6.                 this.name=name;
  7.                 //super(name);
  8.         }
  9. }
复制代码
多线程中  继承Thread类的子类如图定义构造函数并不能修改掉线程名  必须使用注释掉的字段才可以  为什么?  Thread类中对命名的方法是怎样的?
作者: lzw123451    时间: 2013-3-6 21:51
这样命名没问题
但是 super语句一定要定义在子类构造函数的第一行, 所以你的发生错误。
把他们顺序调换一下就行了。
作者: amen0205    时间: 2013-3-6 22:00
李志卫 发表于 2013-3-6 21:51
这样命名没问题
但是 super语句一定要定义在子类构造函数的第一行, 所以你的发生错误。
把他们顺序调换一 ...

我的这两句是选择关系,要么第一句 要么第二句  所以没有顺序的对调问题   关键是  如果如果是第一句   线程名还是Thread-0  这种形式的     你传个abc进去  没用
作者: amen0205    时间: 2013-3-6 22:03
林明华 发表于 2013-3-6 21:52
class Test  extends Thread  
{
        private String name;

共有也不行  因为 name又没被外界访问   不涉及私有的事
作者: lzw123451    时间: 2013-3-6 22:18
门文通 发表于 2013-3-6 22:00
我的这两句是选择关系,要么第一句 要么第二句  所以没有顺序的对调问题   关键是  如果如果是第一句    ...

不好意思我不是很明白你的意思
如果你想一开始创建的线程就有个名字,那么就直接super(name)
如果创建后改名字,那么就用 Test.setName()方法

Thread内部有方法能改变当前创建线程的名字,但没有暴露出来,但在Thread的构造函数中用到了
Thread(String name) ,所以我想在创建期间,你想给线程起名字,除了用父类的方法,就没其他方法了。
作者: amen0205    时间: 2013-3-6 22:23
李志卫 发表于 2013-3-6 22:18
不好意思我不是很明白你的意思
如果你想一开始创建的线程就有个名字,那么就直接super(name)
如果创建后 ...

是吧  我也知道用super(name)是可以的  我现在就是不知道为什么直接写 this.name=name;不可以,然后Thread(String name)的代码在API中也没有  ,不知道是怎么定义的
作者: 克零岚    时间: 2013-3-7 11:33
  1. 呵呵,通哥,你到底想怎样!你看把上面两个哥急的呀,呵呵
  2. 这是我修整后的程序,能通过this.name=name方式修改线程名字的完成代码,下面
  3. public class test01 extends Thread {
  4.         private static String name;
  5.         public test01(String name) {
  6.                 this.name = name;
  7.         }
  8.         public static void main(String[] args) {
  9.                 test01 t = new test01("线程 1");
  10.                 System.out.println("线程原来的名字"+t.getName());
  11.                 t.setName(name);                              //声明Thread线程类本身就有getName()和setName()方法,直接调用来获取线程名字就可以了
  12.         t.start();
  13.         }
  14.         public void run(){
  15.                 System.out.println("修改后的名字"+getName());
  16.                 System.out.println("执行run方法");
  17. }
  18. }
  19. 执行结果:
  20. 线程原来的名字: Thread-0
  21. 修改后的名字: 线程 1
  22. 执行run方法
复制代码

作者: amen0205    时间: 2013-3-8 03:38
克零岚 发表于 2013-3-7 11:33

呵呵  见笑了  其实我明白怎么回事了    我想知道的是 Thread中  的构造函数时怎么定义的  呵呵  我自己找文档好了   你是要进18期吗  加油




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