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

猜你喜欢

转载自blog.csdn.net/weixin_40648180/article/details/89083336
今日推荐