当我通过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();
}
}
答案 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
方法不起作用,因此不会得到任何结果。