C語言中文網 目錄

Java curentThread()方法的作用

curentThread() 方法可返回代碼段正在被哪個線程調用的信息。下面通過一個示例進行說明。

例 1

假設在主線程中有如下代碼:
public class Run1
{
    public static void main(String[] args)
    {
        //調用currentThread()方法輸出當前線程名稱
        System.out.println(Thread.currentThread().getName());
    }
}

執行后在控制臺會輸出“main”,這說明 main() 方法被名為 main 的線程調用。

上例中 currentThread() 方法在主線程中,再來看一個在線程類中調用該方法的示例。假設 MyThread06 線程類的代碼如下:
package ch14;
public class MyThread06 extends Thread
{
    public MyThread06()
    { 
        //調用currentThread()方法輸出當前線程名稱
        System.out.println("構造方法的打印:"+Thread.currentThread().getName()); 
     } 
     @Override 
     public void run()
     { 
        //調用currentThread()方法輸出當前線程名稱
        System.out.println("run方法的打印:"+Thread.currentThread().getName()); 
     } 
}

接下來編寫主線程代碼,創建 MyThread06 線程實例并啟動線程。代碼如下:
package ch14;
public class Test09
{
    public static void main(String[] args)
    {
        MyThread06 mythread=new MyThread06(); 
        mythread.start(); 
        //mythread.run();
    }
}

運行主線程將看到如下所示的結果。
構造方法的打印:main
run方法的打印:Thread-0

從運行結果可以發現,MyThread06 類的構造函數是被 main 線程調用的,而 run() 方法是被名稱為 Thread-0 的線程調用的,run() 方法是自動調用的方法。

對主線程的代碼進行簡單修改,使用“mythread.run()”代碼來啟動線程,此時的運行結果如下所示。
構造方法的打印:main
run方法的打印:main

和之前的運行結果進行對比可以發現,此時 run() 方法的打印也是 main 線程調用的。

例 2

再來測試一個更復雜的情況。假設 MyThread07 線程類的代碼如下:
package ch14;
public class MyThread07 extends Thread
{
    public MyThread07()
    { 
        System.out.println("構造方法---開始"); 
        System.out.println("Thread.currentThread().getName()="+Thread.currentThread().getName()); 
        System.out.println("this.getName()="+this.getName()); 
        System.out.println("構造方法---結束"); 
    } 
    @Override 
    public void run()
    { 
        System.out.println("run()方法---開始"); 
        System.out.println("Thread.currentThread().getName()="+Thread.currentThread().getName()); 
        System.out.println("this.getName()="+this.getName()); 
        System.out.println("run()方法---結束"); 
    } 
}

如上述代碼所示,在 MyThread07 類的構造方法和 run() 方法中都調用了 currentThread() 方法。那么在啟動該線程時構造方法的線程名稱和 run() 方法中的線程名稱是否相同呢?帶著上面的疑問,我們來編寫一個主線程對 MyThread07 類進行測試。主線程代碼如下:
package ch14;
public class Test10
{
    public static void main(String[] args)
    {
        //創建MyThread07線程實例
        MyThread07 myThread=new MyThread07();
        //創建一個線程
        Thread t1=new Thread(myThread);
        //設置線程的名稱
        t1.setName("A");
        //啟動線程
        t1.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 線程。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo