Thread 的 start 方法和 run 方法的调用关系

x33g5p2x  于2022-02-09 转载在 其他  
字(0.5k)|赞(0)|评价(0)|浏览(156)

一 源码

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 状态的。

相关文章