在线程中:this.getName()与Thread.currentThread.getName()有什么区别?
this.getName()
指的就是当前被调用线程的线程名称
Thread.currentThread.getName()
指的是执行当前线程的线程名称.
今天看《java多线程编程核心技术》时,看到的这么个例子:
public class MyThread5 extends Thread{
public MyThread5(){
System.out.println("MyThread5--begin");
System.out.println("Thread.CurrentThread.getName()"+Thread.currentThread().getName());
System.out.println("This.getName()"+this.getName());
System.out.println("MyTHread5--end");
}
@Override
public void run() {
System.out.println("run--begin");
System.out.println("Thread.currentThread.getName()"+Thread.currentThread().getName());
System.out.println("this.getName()"+this.getName());
System.out.println("run---end");
}
}
public class RunMyThread {
public static void main(String[] args) {
try {
MyThread5 myThread5 = new MyThread5();
myThread5.setName("myThread5");
Thread thread = new Thread(myThread5);
thread.setName("a");
thread.start();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("运行结束!");
}
}
运行结果:
首先创建主线程创建了线程实例myThread5,执行了其构造方法。
因此:
1.Thread.currentThread.getName()=main-----------当前执行线程就是main
2.this.getName()--------------------------------------------被执行线程是Thread-0
然后将这个实例myThread5交给其他线程thread来处理,设置thread名称为a,调用这个名为a的线程的start()方法
此时的:
1.Thread.currentThread.getName()=a-----------------当前执行的线程就是a了
2.this.getName()---------------------------------------------被执行的线程就是myThread5