在线程中,Thread.currentThread调用的是当前代码块是由哪个线程执行的,而this则表示当前语句是由哪个对象调用执行的,具体看实例吧。
public class ThreadTest5 {
public static void main(String[] args) {
MyThread5 t = new MyThread5();
t.setName("我是t");
Thread tt= new Thread(t);
tt.setName("我是tt");
//t.start();
tt.start();
}
}
class MyThread5 extends Thread {
public MyThread5() {
System.out.println("构造器中Thread.currentThread().getName:"+Thread.currentThread().getName());
System.out.println("构造器中this.getName:"+this.getName());
}
@Override
public void run() {
System.out.println("run中Thread.currentThread().getName()"+Thread.currentThread().getName());
System.out.println("run中this.getName()"+this.getName());
}
}
首先new了一个MyThread5对象,是由当前主线程创建的,所以Thread.currentThread().getName的结果为main,而this则表示的是当前哪个对象调用的这方法,此时这个线程才刚刚构造还没名字,会给个名字,所以输出结果为Thread-0。
而当我们调用tt.start方法时,就会执行run方法,此时输出currentThread().getName的结果为tt显然没啥疑问,但是this.getName()为啥是t,这是因为,Thread tt= new Thread(t);
传了一个t的参数加入,实际上,这个参数是个target类型的参数。
在内部实际上是重写了run方法,然后执行target.run()方法,所以在tt的run方法中实际上是调用了target.run方法,因此当前的对象是target,也就是传进去的t。