线程中start方法和run方法的关系及相关知识点~小记
start方法的最核心的部分是start0这个本地方法,也就是JNI方法,也就是说在 start方法中会调用 start0方法。
那么重写的那个run方法何时被调用了呢?打开JDK的官方文档,在 start方法中有如下的注释说明:
XX Causes this thread to begin execution; the Java Virtual Machine calls the
<code>run</code> method of this thread
由以上可知:run方法是被JNI方法 start0()调用的。
仔细阅读 start的源码将会总结出如下几个知识点:
口 Thread被构造后的NEW状态,事实上 threadStatus这个内部属性为0。
口不能两次启动 Thread,否则就会出现 IllegalThreadState Exception异常。
口线程启动后将会被加入到一个 ThreadGroup中。
口一个线程生命周期结束,也就是到了 TERMINATED状态,再次调用 start方法是不允许的,也就是说 TERMINATED状态是没有办法回到 RUNNABLE/RUNNING状态的。