currentThread()方法的作用
currentThread() 方法可返回代碼段正在被哪個線程調用的信息。下面通過一個示例進行說明。
例 1
假設在主線程中有如下代碼:
執行后在控制臺會輸出“main”,這說明 main() 方法被名為 main 的線程調用。
上例中 currentThread() 方法在主線程中,再來看一個在線程類中調用該方法的示例:
public class MyThread extends Thread {public MyThread(){ //調用currentThread()方法輸出當前線程名稱System.out.println("構造方法的打印:"+Thread.currentThread().getName()); } @Override public void run(){ //調用currentThread()方法輸出當前線程名稱System.out.println("run方法的打印:"+Thread.currentThread().getName()); } }接下來編寫主線程代碼,創建 MyThread 線程實例并啟動線程。代碼如下:
public class Test {public static void main(String[] args){ MyThread threa=new MyThread();threa.start();} }運行主線程將看到如下所示的結果。
構造方法的打印:main run方法的打印:Thread-0從運行結果可以發現,MyThread 類的構造函數是被 main 線程調用的,而 run() 方法是被名稱為 Thread-0 的線程調用的,run() 方法是自動調用的方法。
對主線程的代碼進行簡單修改,使用“mythread.run()”代碼來啟動線程,此時的運行結果如下所示。
構造方法的打印:main run方法的打印:main和之前的運行結果進行對比可以發現,此時 run() 方法的打印也是 main 線程調用的。
例 2
再來測試一個更復雜的情況
如上述代碼所示,在 MyThread類的構造方法和 run() 方法中都調用了 currentThread() 方法。那么在啟動該線程時構造方法的線程名稱和 run() 方法中的線程名稱是否相同呢?帶著上面的疑問,我們來編寫一個主線程對 MyThread類進行測試。主線程代碼如下:
public class Test {public static void main(String[] args){ //創建MyThread線程實例MyThread myThread=new MyThread();//創建一個線程Thread t=new Thread(myThread);//設置線程名字t.setName("A");//啟動線程t.start();} }執行后的輸出結果如下:
構造方法---開始 Thread.currentThread().getName()=main this.getName()=Thread-0 構造方法---結束 run()方法---開始 Thread.currentThread().getName()=A this.getName()=Thread-0 run()方法---結束從結果可以發現,雖然 this.getName() 方法返回的都是 Thread-0,但是在構造方法中使用的即是 main 線程,而在 run() 方法中使用的是 A 線程。
總結
以上是生活随笔為你收集整理的currentThread()方法的作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java多线程的同步机制:synchro
- 下一篇: isAlive()方法的作用