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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 雨落千木的时节 中级黑马   /  2014-5-19 13:28  /  3160 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 雨落千木的时节 于 2014-5-19 14:06 编辑

//创建一个线程,和主线程交替运行
class Test extends Thread{
        //private String name;
        Test( String name){
                //this.name = name;
                super(name);
        }
        public void run(){
                for(int i=0; i<60; i++){
                System.out.println(this.getName()+"test..."+i);
                }
        }
}
public class ThreadTest {
        public static void main(String[] args) {
               
                Test t1 = new Test("one");
                Test t2 = new Test("two");
                t1.start();
                t2.start();
                for(int i=0; i<60; i++){
                        System.out.println("main..."+i);
                }
        }
}
在使用Test类中,使用super为什么会在显示线程名称时显示one,two?

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

10 个回复

倒序浏览
你new 对象的时候都传递了线程的名称了。
回复 使用道具 举报
skill20 发表于 2014-5-19 13:31
你new 对象的时候都传递了线程的名称了。

我new 的是Test类对象,Test的构造方法使用了super语句,这与Thread有什么关系?
还有this.getName(),此时的this是指Test类还是Thread类?
回复 使用道具 举报
雨落千木的时节 发表于 2014-5-19 13:38
我new 的是Test类对象,Test的构造方法使用了super语句,这与Thread有什么关系?
还有this.getName(),此 ...

继承了Thread.
回复 使用道具 举报
skill20 发表于 2014-5-19 13:31
你new 对象的时候都传递了线程的名称了。

我new 的是Test类对象,Test的构造方法使用了super语句,这与Thread有什么关系?
还有this.getName(),此时的this是指Test类还是Thread类?
回复 使用道具 举报

我知道继承了,但我还是不懂,能解释的再详细点吗?
回复 使用道具 举报
1.Test继承了Thread类,在Test的构造方法中,调用了super(name)方法,这个就是调用了父类的 public Thread(String name)构造方法,这个构造方法就是为线程命名的。

2.如果在Test类的构造方法中不调用super(name),系统会默认给Test取名字,默认为 Thread-0开始

3.自己定义名字,可以使用setName(String name)方式修改线程的名字。

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
  1. //继承了Thread。若还是没明白可以看Thread的构造方法。
  2. class Test extends Thread{
  3.         
  4.         Test( String name){
  5.         //调用了Thread有参数的构造方法。
  6.                 super(name);
  7.         }
  8.         public void run(){
  9.                 for(int i=0; i<60; i++){
  10.                 //这里显示的名字就是你设置的名字。
  11.                         System.out.println(this.getName()+"test..."+i);
  12.                 }
  13.         }
  14. }
  15. public class ThreadTest {
  16.         public static void main(String[] args) {
  17. //给每个对象设置名字。
  18.                 Test t1 = new Test("one");
  19.                 Test t2 = new Test("two");
  20.                 t1.start();
  21.                 t2.start();
  22.                 for(int i=0; i<60; i++){
  23.                         System.out.println("main..."+i);
  24.                 }
  25.         }
  26. }
复制代码
回复 使用道具 举报
雨落千木的时节 发表于 2014-5-19 13:43
我知道继承了,但我还是不懂,能解释的再详细点吗?
  1. //继承了Thread。若还是没明白可以看Thread的构造方法。
  2. class Test extends Thread{
  3.         
  4.         Test( String name){
  5.                 //调用了Thread有参数的构造方法。
  6.                 super(name);
  7.         }
  8.         public void run(){
  9.                 for(int i=0; i<60; i++){
  10.                         //这里显示的名字就是你设置的名字。
  11.                         System.out.println(this.getName()+"test..."+i);
  12.                 }
  13.         }
  14. }
  15. public class ThreadTest {
  16.         public static void main(String[] args) {
  17.                 //给每个对象设置名字。
  18.                 Test t1 = new Test("one");
  19.                 Test t2 = new Test("two");
  20.                 t1.start();
  21.                 t2.start();
  22.                 for(int i=0; i<60; i++){
  23.                         System.out.println("main..."+i);
  24.                 }
  25.         }
  26. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报 1 0

哦,我知道了,谢谢啊!
回复 使用道具 举报
1 你创建了一个类继承了Thread 并实现了其中的run方法。所以你在new的时候是你自己定义的类,但是你在调用start();线程的时候,走的是你定义的类,但是你定义的类是继承与Thread的  最终,你调用的还是Thread类中的方法。   希望可以帮助你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马