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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 学习代码 中级黑马   /  2014-3-17 09:37  /  842 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Demo1 extends Thread
  2. {
  3.         private String name;
  4.         Demo1(String name)
  5.         {
  6.                 super(name);
  7.         }
  8.        
  9. public void run()
  10.         {        while(true)
  11.                 {
  12.                         System.out.println(d.getName()+"hello world");
  13.                 }
  14.         }
  15. }
  16. class Demo
  17. {
  18.         public static void main(String[] args)
  19.         {
  20.                 Demo1 d = new Demo1("zhangsan");
  21.                 Thread  t = new Thread();
  22.                         t.start();
  23.        
  24.         }
  25. }
复制代码

这样不可以吗  请大家指教一下

评分

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

查看全部评分

4 个回复

倒序浏览
不可以,在主函数里面定义的对象d,在类Demo1中找不到该符号,可以通过static Thread currentThread():获取当前线程对象。getName(): 获取线程名称,来获取多线程名称,即Thread.currentThread().getName()。也可以直接用this.getName来获取改变后的多线程名称。

评分

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

查看全部评分

回复 使用道具 举报
老实说 你的程序写的问题很大
下面肯定有你想要的

  1. class Demo1 extends Thread {
  2.         private String name;

  3.         Demo1(String name) {
  4.                 this.name = name; // 此处用super(name)不合适 , 因为父类构造函数是用来分配线程
  5.         }

  6.         public String getDemo1Name() {
  7.                 return name;
  8.         }

  9.         public void run() {
  10.                 while (true) {
  11.                         // Thread.currentThread().getName() 获取当前线程名字
  12.                         System.out.println(Thread.currentThread().getName() + "..."
  13.                                         + this.getDemo1Name() + "..." + "hello world");
  14.                 }
  15.         }
  16. }

  17. public class Demo {
  18.         public static void main(String[] args) {
  19.                 Demo1 d = new Demo1("zhangsan");
  20.                 Thread t = new Thread(d); // 创建线程通常把对象放进去
  21.                 t.setName("yours"); // 用setName方法修改线程的名字
  22.                 t.start();

  23.         }
  24. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 上官睿鹏 于 2014-3-17 10:42 编辑

不知道你要问你的是什么意思?但你贴上来的代码问题不少
  1. class Demo1 extends Thread
  2. {
  3.         private String name;
  4.         Demo1(String name)
  5.         {
  6.                 super(name);
  7.         }
  8.         
  9.        public void run()
  10.         {        while(true)
  11.                 {
  12.                         System.out.println(d.getName()+"hello world");//d是拿来的啊?Demo1里面并没有定义
  13.                 }
  14.         }
  15. }
  16. class Demo
  17. {
  18.         public static void main(String[] args)
  19.         {
  20.                 Demo1 d = new Demo1("zhangsan");
  21.                 Thread  t = new Thread();//你的Demo1是继承Thread的,所以这句话去掉
  22.                         t.start();                  //然后把这句话改成d.start()
  23.         
  24.         }
  25. }
复制代码

改成这样子估计就可以了:
  1. class Demo1 extends Thread
  2. {
  3.      private String name;
  4.      Demo1(String name)
  5.      {
  6.         this.name = name;
  7.      }
  8.          public String toString(){
  9.                 return "name:" + name;
  10.          }
  11.         
  12.         public void run()
  13.        {        
  14.                 while(true)  //最好不要用死循环,等下停不下来的
  15.                {
  16.               System.out.println(name+"hello world");
  17.               }
  18.     }
  19. }
  20. class Demo
  21. {
  22.         public static void main(String[] args)
  23.         {
  24.                 Demo1 d = new Demo1("zhangsan");
  25.                
  26.                 d.start();
  27.         
  28.         }
  29. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
我刚又想了一下 可能你的意思是这样的

因为你问问题的时候没问清楚,大家也不知道什么意思
所以再增加一种如下 :
应该更贴近你要的

  1. class Demo11 extends Thread {
  2.         private String name;

  3.         Demo11(String name) {
  4.                 super(name);
  5.         }

  6.         public void run() {
  7.                 while (true) {
  8.                         // Thread.currentThread().getName() 获取当前线程名字
  9.                         System.out.println(Thread.currentThread().getName() + "..."
  10.                                         + "hello world");
  11.                 }
  12.         }
  13. }

  14. public class Democopy1 {
  15.         public static void main(String[] args) {
  16.                 Demo11 d = new Demo11("zhangsan");
  17.                 d.start(); // 因为你是继承的Thread 所以直接可以调用start();
  18.         }
  19. }
复制代码

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马