package mythread; public class CountOperate extends Thread{ public CountOperate(){ System.out.println("CountOperate---begin"); System.out.println("Thread.currentThread().getName() = " + Thread.currentThread().getName() ); System.out.println("this.getName() = " + this.getName() ); System.out.println("CountOperate---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"); } } package test; import mythread.CountOperate; public class Run{ public static void main(String[] args){ CounOperate c = new CountOperate(); Thread ti = new Thread(c); t1.setName("A"); t1.start(); } }
程序运行结果以下:java
CountOperate---beginide
Thread.currentThread().getName() = main函数
This.getName() = Thread-0this
CountOperate---endspa
run---begin线程
Thread.currentThread().getName = Acode
this.getName = Thread-0对象
run---end接口
形成这样的结果的缘由是:currentThread()方法返回的是对当前正在执行的线程对象的引用,this表明的是当前调用它所在函数所属的对象的引用。get
使用Thread.currentThread().getName()和使用this.getName(),均可以获得线程的名称,可是使用this调用getName()方法只能在本类中,而不能在其余类中,更不能在Runnable接口中,因此只能使用Thread.currentThread().getName()获取线程的名称,不然会出现编译时异常。
因此之后想过去线程的名称尽可能使用Thread.currentThread().getName()。