Thread.currentThread.getName()和this.getName()的区别

    技术2023-09-10  81

    在线程中,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。

    Processed: 0.013, SQL: 9