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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张庚 中级黑马   /  2013-2-5 11:53  /  1315 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-2-15 20:23 编辑

class Demo extends Thread
{
        private String name;
        Demo(String name)
        {
//                super(name);
                this.name = name;
        }
        public void run()
        {
                int[] arr = new int[3];
                System.out.println(arr[3]);
                for(int x=0; x<10; x++)
                {
                        System.out.println("....x="+x+".....name="+Thread.currentThread().getName());
                }
        }
}




class ThreadDemo3
{
        public static void main(String[] args)
        {
                Demo d1 = new Demo("旺财");
                Demo d2 = new Demo("xiaoqiang");
                d1.start();
               
                d2.start();

                System.out.println(4/0);//throw new ArithmeticException();

                for(int x=0; x<20; x++)
                {
                        System.out.println(x+"...."+Thread.currentThread().getName());
                }
        }
}

这段代码里面Demo 不是对象吗  怎么又出了个线程对象名 Thread-0  Thread-1 什么的??? 不是很理解?

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

6 个回复

倒序浏览
Demo 表示线程类,线程的名字java中有自己的命名规则,
回复 使用道具 举报
本帖最后由 丁强强 于 2013-2-5 12:36 编辑

我把你的代码改简单点方便清晰的讲解
class Demo extends Thread   //继承Thread
{
        private String name;      
        Demo(String name)   //构造函数用于初始化 name
    {
         this.name = name;  
  }
        public void run()     //覆盖Thread中的run(),*必须
   {
              for(int x=0; x<10; x++)
                {
                        System.out.println(name+"      "+x);   
/*
name和x的值name你传的什么就打印什么,你可以理解成你给这个线程的命名
*/
           }
        }
}


class ThreadDemo3
{
        public static void main(String[] args)
        {
                Demo d1 = new Demo("旺财");      
                Demo d2 = new Demo("大象");   
/*
这个就说一点,旺财传进去,去Demo(String name)  里面
/

               d1.start();
                d2.start();
        }
}

你说的那个结合你的代码,让我有点乱了,
Thread.currentThread().getName()
你的问题出现在这个上面
你可以这么理解开枪打鸟,开第一枪 开第二枪...
不过java是0,1,2,3
理解了吧


评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
      呵呵,就是给线程自己起个名字嘛。如果同时开启了两个线程,你还能分清楚。如果是同时开了上百个线程呢?为了区分每个线程的作用,给他一个名分而已。当然,你也可以根据自己的喜好,取阿猫阿狗。
回复 使用道具 举报

  1. <DIV class=blockcode>
  2. <BLOCKQUOTE>
  3. <P>class Demo extends Thread//创建Demo类,并集成Thread类-------------创建线程
  4. {
  5. private String name;
  6. Demo(String name)//构造函数
  7. {
  8. // super(name);
  9. this.name = name;
  10. }
  11. public void run()//重写run方法
  12. {
  13. int[] arr = new int[3];
  14. System.out.println(arr[3]);
  15. for(int x=0; x<10; x++)
  16. {
  17. System.out.println("....x="+x+".....name="+Thread.currentThread().getName());
  18. }
  19. }
  20. /*
  21. static Thread CurrendThread():获取当前线程对象。
  22. getName():获取线程名称
  23. 如果用户不去设置就会有JVM默认设置好的线程命名方式命名
  24. thread-0.。。。。。。。。
  25. */


  26. class ThreadDemo3
  27. {
  28. public static void main(String[] args)
  29. {
  30. Demo d1 = new Demo("旺财");
  31. Demo d2 = new Demo("xiaoqiang");
  32. d1.start();

  33. d2.start();

  34. System.out.println(4/0);//throw new ArithmeticException();

  35. for(int x=0; x<20; x++)
  36. {
  37. System.out.println(x+"...."+Thread.currentThread().getName());
  38. }
  39. }
  40. }
  41. /*
  42. 就像这个例子
  43. Demo d1 = new Demo("旺财");
  44. Demo d2 = new Demo("xiaoqiang");通过了构造函数为进程命名
  45. 然后通过Thread.currentThread().getName()来获取进程名,这样在打印的就是自己取得名字了
  46. 而不是thread-0...........
  47. */
复制代码

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
Demo 只是线程这个类的名字,不是线程的名字,线程的名字是楼主所写的
        private String name;
        Demo(String name)
        {
//                super(name);
                this.name = name;
        }
中的name  是线程的一个属性。 以为Dome是继承了Thread类的,所以可以用父类的构造方法实现线程名字的赋值。
         Demo(String name)
        {
            super(name);
        }
Thread-0  Thread-1 是线程默认的名字,也就是说如果定义线程没有构造函数Demo(String name)
而是默认 Demo() 且Demo d1 = new Demo();
则线程名字就会是默认线程名字
回复 使用道具 举报
想为使用Demo的线程起名字吗?在run方法中加setName( )方法就O了,e.g.:setName(name),就能看到旺财和小强了~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马