Thread.currentThread().getName()与this.getName()区别

public class ThreadDemo1 extends Thread{
	
	public ThreadDemo1() {
		System.out.println("---------构造方法start------------------------------");
		System.err.println("currentThread().getName()-我是:"+Thread.currentThread().getName());
		System.err.println("this.getName()-我是:"+this.getName());
		System.out.println("---------构造方法end------------------------------");
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ThreadDemo1 t = new ThreadDemo1();
		Thread t1 = new Thread(t);
		t1.setName("t1");
		t1.start();
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("*************run start*************");
		System.err.println("currentThread().getName()-我是:"+Thread.currentThread().getName());
		System.err.println("this.getName()-我是:"+this.getName());
		System.out.println("*************run end*************");
	}
	
}

输出:

---------构造方法start------------------------------
currentThread().getName()-我是:main
this.getName()-我是:Thread-0
---------构造方法end------------------------------
*************run start*************
currentThread().getName()-我是:t1
this.getName()-我是:Thread-0
*************run end*************

结论:
currentThread().getName()是指当前线程,哪个线程执行这个代码块。
this.getName()是指当前对象。在这个demo中是对象t,t的getName也就是打印的Thread-0

分析:

1. 在构造方法执行的时候,构造方法start

currentThread().getName()-我是:main -->这行输出是因为构造方法public ThreadDemo1() 是main函数执行的,所以当前线程的getName也就是是main线程。
this.getName()-我是:Thread-0 -->这行输出的Thread0是怎么来的呢?请看Thread类的构造函数:(在eclipse中,在此行代码Thread t1 = new Thread(t);
点击选中new Thread(t)的Thread单词,然后按住Ctrl,再单击Thread单词即可进入。)

public Thread(Runnable target) {
        init(null, target, "Thread-" + nextThreadNum(), 0);
    }

2. run方法执行的时候run start
输出为:
currentThread().getName()-我是:t1
this.getName()-我是:Thread-0
当执行run方法时,
currentThread().getName(),的当前线程是t1,所以输出也是t1;
this.getName(),的当前对象是t,因为代码中没有给t setName,所以打印的是Thread构造函数中的默认线程名称。
假如读者想给t setName,不想用Thread类给的默认线程名称,可以在main方法中添加t.setName(“hubotao”);

public static void main(String[] args) {
		// TODO Auto-generated method stub
		ThreadDemo1 t = new ThreadDemo1();
		t.setName("hubotao"); //添加此行代码
		Thread t1 = new Thread(t);
		t1.setName("t1");
		t1.start();
	}

打印结果会是这样:

---------构造方法start------------------------------
currentThread().getName()-我是:main
this.getName()-我是:Thread-0
---------构造方法end------------------------------
*************run start*************
currentThread().getName()-我是:t1
this.getName()-我是:hubotao     -->这行打印结果有所不同
*************run end*************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值