1

当我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();
    }
}
4

3 回答 3

4

我相信您需要调用superRunnableDemo 的构造函数:

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

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

如果不这样做,您实际上是在不带参数的情况下隐式调用 super,因此没有为 RunnableDemo 实例设置可运行对象。

于 2013-09-21T03:37:07.460 回答
0

您还需要添加@Overriderun()

@Override
public void run(){
    for(int i=1;i<=n;i++){
        System.out.println( s +"-->"+ i);
    }
} 
于 2013-09-21T03:51:06.247 回答
0

问题是您run在创建Thread. 由于默认run方法不执行任何操作,因此您不会得到任何结果。

于 2013-09-21T03:53:51.183 回答