2013-01-22 400 views
0

據說線程永遠不應該在構造函數中啓動,但我不確定this參考在這種情況下如何轉義構造函數Test。我查看了底層的Thread.java,我無法弄清楚。在構造函數中啓動線程

class Test { 

    static MyThread thread; 

    public Test() { 

     thread = new MyThread(); 
     thread.start(); 

    } 

} 

class MyThread extends Thread { 

    public void run() { 

     //do stuff 

    } 

} 

感謝您的幫助。

thread = new MyThread();會打電話Thread超級構造函數:

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

我沒有看到一個參考越來越遠。

+0

使線程靜態是一個壞主意。 – SLaks

+0

相關http://stackoverflow.com/questions/8057510/java-starting-a-new-thread-in-a-constructor – Tunaki

回答

5

this只能逃避,如果線程引用this(例如,如果它是一個內部類)

你的線程不引用this,所以這不是一個問題。

但是,構建一個對象通常被期望是無副作用的;這不是一個好主意。

+0

但我讀過的書說,你永遠不應該這樣做。這種情況好嗎?編輯:似乎很看你的編輯。 – jn1kk

+0

@jsn:書是對的;你不應該這樣做,但不是因爲這個原因。 – SLaks