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()。