为什么start()不能在我的Thread扩展中工作

时间:2013-09-21 03:35:05

标签: java runnable

当我通过run()调用t.start()时,我正在获取输出,但未通过obj.start()获得相同的输出。可能是什么原因?

任何人都能解释一下吗?

class Ex1 implements Runnable {

    int n;
    String s;

    public void run(){
        for(int i=1;i<=n;i++){
            System.out.println( s +"-->"+ i);
        }
    }   
}


class RunnableDemo extends Thread {

    Ex1 e;
    RunnableDemo(Ex1 e) {
        this.e = e;
    }

    public static void main(String[] args) {    

        Ex1 obj1 = new Ex1();
        Ex1 obj2 = new Ex1();

        obj1.n = 5;
        obj1.s = "abc";

        // Thread t = new Thread(obj1);
        // t.start();
        RunnableDemo obj = new RunnableDemo(obj1);
        obj.start();
    }
}

3 个答案:

答案 0 :(得分:4)

我相信您需要在RunnableDemo的构造函数中调用super

RunnableDemo(Ex1 e){
        super(obj);
        this.e = e;
}

这使用obj参数调用超类的(Thread)构造函数,以便start方法按预期工作。

如果不这样做,实际上你实际上是在没有参数的情况下调用super,因此没有为RunnableDemo实例设置runnable。

答案 1 :(得分:0)

您还需要将@Override添加到run()

@Override
public void run(){
    for(int i=1;i<=n;i++){
        System.out.println( s +"-->"+ i);
    }
} 

答案 2 :(得分:0)

问题是在创建run的子类时没有覆盖Thread方法。由于默认的run方法不起作用,因此不会得到任何结果。