黑马程序员技术交流社区

标题: 线程名字的问题,谢谢! [打印本页]

作者: 黑马一刘昭    时间: 2013-5-26 19:40
标题: 线程名字的问题,谢谢!
package re526;

class Mythread extends Thread{
        private String name;
       
        public Mythread(String name) {
                super();
                this.name = name;
        }

        @Override
        public void run() {
                for (int i = 0; i < 100; i++) {
                        System.out.println(getName()+i);//为什么得到的名字会是默认的Thread-0?前面不是已经设置创建线程的时候初始化名字“A”了吗?
                }
        }
}

public class ThreadDemo1 {

        public static void main(String[] args) {
               
                for (int i = 0; i < 100; i++) {
                        System.out.println(i);
                        if(i == 50){
                                new Mythread("A").start();//这不是创建线程的时候就初始化名字“A”吗?
                        }
                }
        }
}



作者: 秦久启    时间: 2013-5-26 19:51
把上面的构造方法写成这样就可以了
public Mythread(String name) {
                super(name);
},相信你可以看懂。
作者: 黑马一刘昭    时间: 2013-5-26 20:03
秦久启 发表于 2013-5-26 19:51
把上面的构造方法写成这样就可以了
public Mythread(String name) {
                super(name);

对的,调用了父类的构造方法,然后呢?求详解!谢谢。
作者: 秦久启    时间: 2013-5-26 20:45
黑马一刘昭 发表于 2013-5-26 20:03
对的,调用了父类的构造方法,然后呢?求详解!谢谢。

给你一段代码看看线程的命名和取得线程的名称:
  1. class MyThread implements Runnable
  2. {
  3.         public void run()
  4.         {
  5.                 for(int x=0;x<8;x++)
  6.                 {
  7.                         System.out.println(Thread.currentThread().getName() + "运行,x =" + x);
  8.                 }
  9.         }
  10. }
  11. public class Demo
  12. {
  13.         public static void main(String args[])
  14.         {
  15.                 MyThread my = new MyThread();
  16.                 new Thread(my,"线程A").start();
  17.                 new Thread(my,"线程B").start();
  18.                 new Thread(my).start();
  19.                 new Thread(my).start();
  20.                 new Thread(my).start();
  21.         }

  22. }
复制代码

作者: 梁秋瑜    时间: 2013-5-26 20:48
getName()是父类里的方法,你没有把name通过super(name)传给父类的方法,Myhtread里没有自己的getName()方法,是继承了父类的,必须要传给父类才能输出你想要的结果,除非你重写getName()方法
作者: 王靖远    时间: 2013-5-26 21:25
获取线程名称的方法是Thread.currentThread().getName()
作者: 黑马一刘昭    时间: 2013-5-27 16:54
梁秋瑜 发表于 2013-5-26 20:48
getName()是父类里的方法,你没有把name通过super(name)传给父类的方法,Myhtread里没有自己的getName( ...

super(name)不是调用父类构造方法吗。那它是怎么把name传递给父类的?谢谢
作者: FantasticPie    时间: 2013-5-27 16:58
传智播客毕向东Java基础视频教程-day11-06-多线程(获取线程对象以及名称)
作者: 黑马一刘昭    时间: 2013-5-27 17:00
王靖远 发表于 2013-5-26 21:25
获取线程名称的方法是Thread.currentThread().getName()

谢谢,你说的不错。不过这里错的不是这个问题,因为我写的这个线程是继承写法来的,所以可以直接调用父类的方法,直接写没问题。错在没把name传递给父类、
作者: 黑马一刘昭    时间: 2013-5-27 17:01
秦久启 发表于 2013-5-26 20:45
给你一段代码看看线程的命名和取得线程的名称:

非常感谢,不过你用的是实现写法,而我问的是继承写法。
super(name)不是调用父类构造方法吗。那它是怎么把name传递给父类的?谢谢:handshake
作者: 黑马一刘昭    时间: 2013-5-27 17:03
FantasticPie 发表于 2013-5-27 16:58
传智播客毕向东Java基础视频教程-day11-06-多线程(获取线程对象以及名称)

老乡你好,同是南阳人的飘过!!




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