一 源码
public synchronized void start() {
if (threadStatus != 0)
throw new IllegalThreadStateException();
group.add(this);
boolean started = false;
try {
start0();
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
}
}
}
二 说明
start 方法的核心部分是 start0 这个本地方法,也就是 JNI 方法
private native void start0();
start 方法中会调用 start0 方法,start0 会调用 run 方法。
三 总结
-
Thread 被构造后的 NEW 状态,对应 threadStatus 的内部属性是0。
-
不能两次启动 Thread,否则会抛出 IllegalThreadStateException 异常。
-
线程启动后,会被加入到一个 ThreadGroup 中。
-
一个线程生命周期结束后,也就是 TERMINATED 状态,再次调用 start 方法是不允许的,也就是说 TERMINATED 状态是没办法回到 RUNNABLE/RUNNING 状态的。