打字猴:1.700449543e+09
1700449543
1700449544 if(threadStatus!=0)
1700449545
1700449546 throw new IllegalThreadStateException();
1700449547
1700449548 //加入线程组中
1700449549
1700449550 group.add(this);
1700449551
1700449552 //分配栈内存,启动线程,运行run方法
1700449553
1700449554 start0();
1700449555
1700449556 //在启动前设置了停止状态
1700449557
1700449558 if(stopBeforeStart){
1700449559
1700449560 stop0(throwableFromStop);
1700449561
1700449562 }
1700449563
1700449564 }
1700449565
1700449566 //本地方法
1700449567
1700449568 private native void start0();
1700449569
1700449570 这里的关键是本地方法start0,它实现了启动线程、申请栈内存、运行run方法、修改线程状态等职责,线程管理和栈内存管理都是由JVM负责的,如果覆盖了start方法,也就是撤消了线程管理和栈内存管理的能力,这样如何启动一个线程呢?事实上,不需要关注线程和栈内存的管理,只需要编码者实现多线程的逻辑即可(即run方法体),这也是JVM比较聪明的地方,简化多线程应用。
1700449571
1700449572 那可能有读者要问了:如果确实有必要覆写start方法,那该如何处理呢?这确实是一个罕见的要求,不过,要覆写也很容易,只要在start方法中加上super.start即可,代码如下:
1700449573
1700449574 class MultiThread extends Thread{
1700449575
1700449576 @Override
1700449577
1700449578 public void start(){
1700449579
1700449580 /*线程启动前的业务处理*/
1700449581
1700449582 super.start();
1700449583
1700449584 /*线程启动后的业务处理*/
1700449585
1700449586 }
1700449587
1700449588 @Override
1700449589
1700449590 public void run(){
1700449591
1700449592 //MultiThread do something.
[ 上一页 ]  [ :1.700449543e+09 ]  [ 下一页 ]