A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马一刘昭 高级黑马   /  2013-5-26 19:40  /  2150 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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”吗?
                        }
                }
        }
}


评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 神马都是浮云

查看全部评分

10 个回复

倒序浏览
把上面的构造方法写成这样就可以了
public Mythread(String name) {
                super(name);
},相信你可以看懂。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
秦久启 发表于 2013-5-26 19:51
把上面的构造方法写成这样就可以了
public Mythread(String name) {
                super(name);

对的,调用了父类的构造方法,然后呢?求详解!谢谢。
回复 使用道具 举报
黑马一刘昭 发表于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
getName()是父类里的方法,你没有把name通过super(name)传给父类的方法,Myhtread里没有自己的getName()方法,是继承了父类的,必须要传给父类才能输出你想要的结果,除非你重写getName()方法

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
获取线程名称的方法是Thread.currentThread().getName()
回复 使用道具 举报
梁秋瑜 发表于 2013-5-26 20:48
getName()是父类里的方法,你没有把name通过super(name)传给父类的方法,Myhtread里没有自己的getName( ...

super(name)不是调用父类构造方法吗。那它是怎么把name传递给父类的?谢谢
回复 使用道具 举报
传智播客毕向东Java基础视频教程-day11-06-多线程(获取线程对象以及名称)
回复 使用道具 举报
王靖远 发表于 2013-5-26 21:25
获取线程名称的方法是Thread.currentThread().getName()

谢谢,你说的不错。不过这里错的不是这个问题,因为我写的这个线程是继承写法来的,所以可以直接调用父类的方法,直接写没问题。错在没把name传递给父类、
回复 使用道具 举报
秦久启 发表于 2013-5-26 20:45
给你一段代码看看线程的命名和取得线程的名称:

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

老乡你好,同是南阳人的飘过!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马