为什么线程新建后,先调用run,再调用start,不报错,start也不执行

package test;

public class BN extends Thread{
private int i;
@Override
public void run() {
for(;i<100;i++){
System.out.println(this.getName()+" "+i);
}
}

public static void main(String[] args) {
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+" "+i);
if(i==20){
BN s=new BN();
s.run();
s.start();
}
}
}

}

个人理解,调用start就是启动一个线程,线程会自动执行run函数。直接调用run,就是用本线程去执行run里面的内容,run里循环结束,然后返回, 然后start(),然后线程启动,由于循环变量i已经100了,线程里,循环直接结束。

刚测试了,就是这样。run里面,改成这样:Thread.currentThread().getName()来看。
温馨提示:答案为网友推荐,仅供参考