this.getName
this的意思是代表当前对象的。而this在线程的环境下,代表的是当前线程实例对象本身。所以this.getName是当前线程实例对象的线程名称是什么。
Thread.currentThread.getName
Thread.currentThread.getName意思是在当前代码块中执行的线程名称是什么。
例子
public class CountOperate extends Thread {
public CountOperate() {
System.out.println("CountOperate---begin");
System.out.println("Thread.currentThread().getName()=" + Thread.currentThread().getName());
System.out.println("Thread.currentThread().isAlive()=" + Thread.currentThread().isAlive());
System.out.println("this.getName()=" + this.getName());
System.out.println("this.isAlive()=" + this.isAlive());
System.out.println("CountOperate---end");
}
@Override
public void run() {
System.out.println("run---begin");
System.out.println("Thread.currentThread().getName()=" + Thread.currentThread().getName());
System.out.println("Thread.currentThread().isAlive()=" + Thread.currentThread().isAlive());
System.out.println("this.getName()=" + this.getName());
System.out.println("this.isAlive()=" + this.isAlive());
System.out.println("run---end");
}
}
public class Test {
public static void main(String[] args) {
CountOperate c = new CountOperate();
Thread t1 = new Thread(c);
System.out.println("main begin t1 isAlive=" + t1.isAlive());
t1.start();
System.out.println("main end t1 isAlive=" + t1.isAlive());
}
}
结果:
CountOperate---begin
Thread.currentThread().getName()=main
Thread.currentThread().isAlive()=true
this.getName()=Thread-0
this.isAlive()=false
CountOperate---end
main begin t1 isAlive=false
main end t1 isAlive=true
run---begin
Thread.currentThread().getName()=Thread-1
Thread.currentThread().isAlive()=true
this.getName()=Thread-0
this.isAlive()=false
run---end
说明:
① 首先搞明白该例子中一共有三条线程:
main线程:执行main方法的线程。
Thread-0线程:当前CountOperate线程实例的线程。
Thread-1线程:new Thread类创建的线程。
② CountOperate初始化代码说明:
CountOperate---begin
Thread.currentThread().getName()=main
Thread.currentThread().isAlive()=true
this.getName()=Thread-0
this.isAlive()=false
CountOperate---end
执行构造器,然后当前main方法中执行初始化CountOperate类,所以当前线程的名称是main,状态是true。而当前CountOperate线程实例为Thread-0,没有启动所以状态为false。
③ Thread1线程说明:
main begin t1 isAlive=false
main end t1 isAlive=true
Thread-1线程的线程执行器没有启动,那么状态为false。执行start方法,Thread-1线程的线程执行器启动,那么状态就为true了。
④ run方法执行说明:
run---begin
Thread.currentThread().getName()=Thread-1
Thread.currentThread().isAlive()=true
this.getName()=Thread-0
this.isAlive()=false
run---end
首先执行run方法的线程为Thread-1,所以当前代码块中的线程为Thread1(Thread.currentThread().getName()=Thread-1),状态自然为true。
但是this.getName()是代表当前线程Thread-0的实例,因为CountOperate线程根本没有启动,所以状态为false。
网友评论