这要分两种情况:
1、继承Thread:
1.1 线程类
public class CountOperate extends Thread {
private String name;
public CountOperate(String name){
//初始化变量,但是没有get、set方法
this.name=name;
System.out.println("CountOperate begin ---");
System.out.println("name ="+name);
// 当前正在执行的线程名称System.out.println("Thread.currentThread().getName()= "+Thread.currentThread().getName());
// 该 CountOperate 继承自Thread。因为没有覆盖父类Thread的 getName()方法。所以直接调用父类的方法。
System.out.println("this.getName() = "+this.getName());
System.out.println("CountOperate end ---");
}
public void run(){
System.out.println("run begin ---");
System.out.println("name ="+name);
System.out.println("Thread.currentThread().getName()= "+Thread.currentThread().getName());
System.out.println("this.getName() = "+this.getName());
System.out.println("run end ---");
}
}
1.2、启动类
public class Run {
public static void main(String[] args) {
CountOperate c=new CountOperate("jack");
Thread thread=new Thread(c);
thread.setName("ATest");
thread.start();
System.out.println("c.getName() = "+c.getName());
System.out.println("thread.getName() = "+thread.getName());
}
}
1.3、运行结果:
//构造器中的
CountOperate begin ---
name =jack
Thread.currentThread().getName()= main
this.getName() = Thread-0
CountOperate end ---
//等价于this.getName()
c.getName() = Thread-0
//等价于Thread.currentThread().getName()
thread.getName() = ATest
run begin ---
name =jack
Thread.currentThread().getName()= ATest
this.getName() = Thread-0
run end ---
总结:
1、注意两个线程对象 CountOperate 和 Thread,它们是不同的两个线程对象 :
2、CountOperate 线程没有覆盖父类的getName()方法,所以 this.getName()直接调用父类的同名方法。
3、CountOperate.getName() 等价于 this.getName();
4、 Thread.currentThread().getName() 等价于 Thread.getName();
2、实现Runnable接口
//1、实现Runnable接口的线程
public class CountOperateImp implements Runnable {
private String name;
public CountOperateImp(String name){
this.name=name;
System.out.println("CountOperate begin ---");
System.out.println("name ="+name);
System.out.println("Thread.currentThread().getName()= "+Thread.currentThread().getName());
//Runnable接口中并没有getName()方法
// System.out.println("this.getName() = "+this.getName());
System.out.println("CountOperate end ---");
}
public void run(){
System.out.println("run begin ---");
System.out.println("name ="+name);
System.out.println("Thread.currentThread().getName()= "+Thread.currentThread().getName());
//Runnable接口中并没有getName()方法
//System.out.println("this.getName() = "+this.getName());
System.out.println("run end ---");
}
}
2、执行类
public class Run {
public static void main(String[] args) {
// CountOperate c=new CountOperate("jack");
CountOperateImp c=new CountOperateImp("jack");
Thread thread=new Thread(c);
thread.setName("ATest");
thread.start();
// Runnable接口中并没有getName()方法
// System.out.println("c.getName() = "+c.getName());
System.out.println("thread.getName() = "+thread.getName());
}
}
3、结果:
CountOperate begin ---
name =jack
Thread.currentThread().getName()= main
CountOperate end ---
//等价于Thread.currentThread().getName()
thread.getName() = ATest
run begin ---
name =jack
Thread.currentThread().getName()= ATest
run end ---
总结:
1、Runnable中并没有getName()方法,如果直接调用this.getName()会出现编译错误。