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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 霍明波 中级黑马   /  2012-8-22 23:39  /  1629 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class ThreadDemo
{
        public static void main(String[] args)
        {       
                ThreadTest t1 = new ThreadTest("one--");
                ThreadTest t2 = new ThreadTest("two--");
                t1.start();
                t2.start();
                for(int x=0;x<=60;x++)
                {
                        System.out.println("main");
                }
        }
}

class ThreadTest extends Thread
{
        private String name;
        ThreadTest(String name)
        {
                this.name = name;
        }
        public void run()
        {
                for(int x=0;x<=60;x++)
                {
                        System.out.println(this.getName());
                }
        }
}
线程有个可以打印线程名字的方法,我调用了打印的都是现成的默认名字,
而我设定的名字没有打印出来,
能告诉我是怎么回事吗?

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
我想说,楼主疏忽了,“this.getName”应该写成“this.name”,这样就可以了

未命名.jpg (29.02 KB, 下载次数: 8)

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

回复 使用道具 举报
把ThreadTest的构造方法从
         private String name;
        ThreadTest(String name)
        {
                this.name = name;
        }
改成这样:
ThreadTest(String name)
     {
             super(name);
     }
线程Thread的传入自定义名字的构造方法已经定义好了,继承就好了,你又定义了一个,就把父类的方法盖掉了!!

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
class ThreadTest extends Thread
{
         //private String name;
      ThreadTest(String name)
       {
        super(name);//这里直接调用父类定义好的方法就行了。其他的都不需要。
                 //this.name = name;
       }
         public void run()
         {
                 for(int x=0;x<10;x++)
                 {
                         System.out.println(this.getName());//这里获取线程名的方法建议写成Thread.currentThread().getName()。
                 }
         }
}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 周世阳 于 2012-8-23 00:51 编辑

原因在于
class ThreadDemo
{
        public static void main(String[] args)
        {        
                ThreadTest t1 = new ThreadTest("one--");
                ThreadTest t2 = new ThreadTest("two--");
                t1.start();
                t2.start();
                for(int x=0;x<=60;x++)
                {
                        System.out.println("main");
                }
        }
}

class ThreadTest extends Thread
{
        private String name;//父类中已经有name变量,你这里却覆盖了父类的name变量
        ThreadTest(String name)
        {
                this.name = name;
        }
        public void run()
        {
                for(int x=0;x<=60;x++)
                {
                        System.out.println(this.getName());//getName是从父类继承的方法,返回的是父类的name,不是子类覆盖的
                }
        }
}

将代码修改下就可以达到你预想的效果
package com.itheima;

public class ThreadDemo
{
        public static void main(String[] args)
        {        
                ThreadTest t1 = new ThreadTest("one--");
                ThreadTest t2 = new ThreadTest("two--");
                t1.start();
                t2.start();
                for(int x=0;x<=60;x++)
                {
                        System.out.println("main");
                }
        }
}
class ThreadTest extends Thread
{
       //去掉覆盖的变量
        ThreadTest(String name)
        {
                super(name);//调用父类的构造方法
        }
        public void run()
        {
                for(int x=0;x<=60;x++)
                {
                        System.out.println(this.getName());
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

回复 使用道具 举报
class ThreadTest extends Thread
{
        private String name;
        ThreadTest(String name)
        {
                super(name);  // 原程序:this.name = name; 细看程序不难发现!你使用this.name = name;
                                    //这句话只是把这个构造方法自定义而已,并没有传递给父类Thread的构造还是Thread(String name);
                                    //所以你调用的还是Thread默认的名称。只有使用super(name)方能传递给父类,才能打印你自己传递的名称!
        }
        public void run()
        {
                for(int x=0;x<=60;x++)
                {
                        System.out.println(this.getName());
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

回复 使用道具 举报
继承:Thread类的线程 ,命名用Thread的一个setName()方法!
class ThreadDemo
{
        public static void main(String[] args)
        {        
                       
                ThreadTest t1 = new ThreadTest();
                ThreadTest t2 = new ThreadTest();
                                t1.setName("one--");
                t1.start();                               
                t2.setName("two--");
                t2.start();                               
                for(int x=0;x<=60;x++)
                {
                        System.out.println("main");
                }
        }
}
class ThreadTest extends Thread
{
      
        public void run()
        {
                for(int x=0;x<=60;x++)
                {
                        System.out.println(this.getName());
                }
        }
}
也可以通过子类继承父类中调用,但必须在构造方法实现super(name);
代码如下:
class ThreadDemo
{
        public static void main(String[] args)
        {        
                       
                ThreadTest t1 = new ThreadTest("one--");
                ThreadTest t2 = new ThreadTest("two--");
                t1.start();                       
                t2.start();                       
                for(int x=0;x<=60;x++)
                {
                        System.out.println("main");
                }
        }
}

class ThreadTest extends Thread
{
        private String name;
        ThreadTest(String name)
        {           
               super(name);
        }
        public void run()
        {
                for(int x=0;x<=60;x++)
                {
                        System.out.println(this.getName());
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

回复 使用道具 举报
已解决,这么多得分得  看哪个呢{:soso_e102:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马