package com.freeflying.thread.base;
/**
* @ClassName: ThisAndCurrentThread
* @Description:this和currentThread的区别
* @author freeflying
* @date 2018年6月22日
*/
public class ThisAndCurrentThread {
public static void main(String[] args) {
ThisAndCurrentThreadEx thisAndCurrentThreadEx=new ThisAndCurrentThreadEx();
Thread thread=new Thread(thisAndCurrentThreadEx);
thread.setName("A");
thread.start();
}
}
class ThisAndCurrentThreadEx extends Thread{
public ThisAndCurrentThreadEx() {
System.out.println("ThisAndCurrentThreadEx----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("ThisAndCurrentThreadEx----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");
}
}
结果:
ThisAndCurrentThreadEx----begin
Thread.currentThread.getName()=main
Thread.currentThread.isAlive()=true
this.getName()=Thread-0
this.isAlive()=false
ThisAndCurrentThreadEx----end
run----begin
Thread.currentThread.getName()=A
Thread.currentThread.isAlive()=true
this.getName()=Thread-0
this.isAlive()=false
run----end
结论:this指向的是创建对象的那个线程,而不是当前执行的线程,Thread.currentThread指向的是当前正在执行的线程