2012-03-28 90 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);