- 在Java多线程编程思想中有一段关于Thread.currentThread().getName()和this.getName()的问题.也看到很多人对这个问题进行了解答,感觉总不是一针见血,很繁琐,并且并没有一步步的进行说明,在这里,我做一下简单的讲解.
- 先上代码:
package com.demo2;
public class CountOperate extends Thread {
public CountOperate() {
System.out.println("Thread.currentThread().getName()=" + Thread.currentThread().getName());
System.out.println("this.getName() =" + this.getName());
}
@Override
public void run() {
System.out.println("Thread.currentThread().getName()=" + Thread.currentThread().getName());
System.out.println("this.getName() =" + this.getName());
}
}
package com.demo2;
public class Run {
public static void main(String[] args) {
CountOperate c = new CountOperate();
Thread thread = new Thread(c);
thread.setName("AAA");
thread.start();
}
}
运行结果:
为什么在new对象的时候,执行构造方法时 Thread.currentThread().getName()与this.getName()的结果不同呢.
Thread.currentThread()是指向当前线程的,由于我们是在main方法内new对象执行构造方法的,所以结果值是 main
重点来啦
this.getName(); 是指当前对象所调用的getName()方法.当前对象是CountOperate对象,他本身是没有getName()方法的,从而执行该对象的父类Thread的getName()方法,
- 而在new该对象的时候也执行了父类Thread的构造方法,底层内容如下:
- 将name字段进行传递,在下图里面进行了赋值.
- 然后在getName()方法中 如下图
- 得到了刚赋值的 name ,从而就有了Thread-0
各位同学都懂了嘛~