2012-03-28 105 views
0

當我嘗試啓動線程(u)時,它什麼都不做! 這是我有我的類中:Java - 線程無法啓動

private Updater uc; 
Thread t1 = new Thread(uc); 
-bunch of other code- 
t1.start(); 

Updater.java:

public class Updater implements Runnable{ 
public void run(){ 
    System.out.println("I work!"); 
    } 
} 

輸出是什麼。任何人都知道爲什麼?

回答

9

除非我失去了一些東西 - 你永遠不初始化UC:

uc = new Updater(); 

當您在爲Runnable的傳遞null,那麼線程只是通過一個內部init方法,它會從被稱爲傳遞空值所有的Thread構造函數,包括那些沒有Runnable參數的構造函數。

如果目標Runnable爲null,Thread run()根本不會執行除exit之外的任何操作。感謝Jon。

+0

謝謝,忘了那個:) – TheMorfeus 2012-03-28 16:44:31

+2

確實。當你將'null'作爲'Runnable'傳入時,'Thread'只是將'null'值傳遞給一個內部'init'方法,該方法從所有'Thread'構造函數中調用,包括那些沒有'Runnable'參數。在目標'Runnable'爲'null'的情況下,Thread'run()'除了退出外沒有其他任何操作。 – Jon 2012-03-28 16:49:03

4

看起來您正在傳遞null Runnable。試試:

private Updater uc = new Updater(); 
Thread t1 = new Thread(uc);