1. 说明
本文主要从使用的层面说明它们的区别。
2. 区别
先写一个简单的代码程序:
观察它的运行结果。
package www.gzhou.thread2;
public class MyThread extends Thread {
@Override
public void run() {
super.run();
System.out.println("Thread.currentThread().getName()是"+Thread.currentThread().getName());
System.out.println("MyThread == "+this.isAlive());
}
}
package www.gzhou.thread2;
public class RunTest {
public static void main(String[] args) throws InterruptedException {
MyThread myThread = new MyThread();
myThread.start();
myThread.sleep(100); //为了让run方法执行完,故睡眠一定时间
Thread t1 = new Thread(myThread);
t1.start();
}
}
根据运行结果:我们知道一个true,一个false说明了this和Thread.currentTread()指向不是同一个线程实例。根据运行的顺序,第一个指向mythread ( MyThread myThread = new MyThread()😉),而第二个指向t1。所以可以知道this指向的是本类(MyThread)实例化的对象。而new Thread(…)创建的实例是t1,它指向的是Thread。
总结:
this指向的是创建的线程实例(myThread),而不是Thread。
Thread.currentTread()指向Thread类实例,也就可以调用其中的一些方法了。
扩展:
this.getName()调用的是Thread.getName()。
Thread.currentTread().getName()调用的是t1.getName()。(Thread t1 = new Thread(myThread);)
建议自己写程序验证一下,理解更深入。