从start源码——理解线程
1 public synchronized void start(){ 2 if(threadStatus!=0) 3 throw new IllegalThreadStateException(); 4 group.add(this); 5 boolean started=false; 6 try{ 7 start0(); 8 started=true; 9 }finally{ 10 try{ 11 if(!started){ 12 group.theadStartFailed(this); 13 } 14 }catch(Throwable ignore){ 15 16 } 17 } 18 }
仔细阅读start的源码将会总结出如下几个知识点。
- Thread被构造后的NEW状态,事实上threadStatus这个内部属性为0。
- 不能两次启动Thread,否则就会出现IllegalThreadStateException异常。
- 线程启动后将会被加入到一个ThreadGroup中
- 一个线程生命周期结束,也就是到了TERMINATED状态,再次调用start方法是不允许的,也就是说TERMINATED状态是没有办法回到RUNNABLE/RUNNING状态的