我有一个扩展Thread类的MyTunnel类:
public class MyTunnel extends Thread {
protected Object obj;
public MyTunnel() {
super(MyTunnel.class.getName());
obj = new Object();
prepare();
}
public void prepare() {
System.out.println("Before starting...");
start();
synchronized(obj) {
try {
obj.wait(3000);
} catch (InterruptedException e) {
System.out.println("Error while waiting thread to start");
}
}
System.out.println("After starting...");
}
@Override
public void run() {
System.out.println("running...");
}
}
当我在主线程上运行以下代码时:
System.out.println("Before creating tunnel...");
MyTunnel tunnel = new MyTunnel();
System.out.println("After creating tunnel...");
System.out.println("Is tunnel alive ? " + tunnel.isAlive());
我看到打印出这样的:
Before creating tunnel...
Before starting...
running...
After starting...
After creating tunnel...
Is tunnel alive ? false
我的问题是,为什么tunnel.isAlive()返回false(在上次打印输出消息中)?
但是,如果我将prepare()函数更改为:
public void prepare() {
System.out.println("Before starting...");
start();
System.out.println("After starting...");
}
再次运行代码,tunnel.isAlive()然后返回true.为什么?