Java教程-如果我们直接调用Java的run()方法而不是start()方法会发生什么?

如果我们直接调用Java的run()方法而不是start()方法会发生什么?
- 每个线程都在独立的调用堆栈中启动。
- 从主线程调用run()方法时,run()方法将进入当前的调用堆栈,而不是在一个新的调用堆栈的开头。
文件名:TestCallRun1.java
class TestCallRun1 extends Thread{
public void run(){
System.out.println("running...");
}
public static void main(String args[]){
TestCallRun1 t1=new TestCallRun1();
t1.run();//很好,但不会启动单独的调用堆栈
}
}
输出:
running...
直接调用run()方法的问题
文件名:TestCallRun2.java
class TestCallRun2 extends Thread{
public void run(){
for(int i=1;i<5;i++){
try{Thread.sleep(500);}catch(InterruptedException e){System.out.println(e);}
System.out.println(i);
}
}
public static void main(String args[]){
TestCallRun2 t1=new TestCallRun2();
TestCallRun2 t2=new TestCallRun2();
t1.run();
t2.run();
}
}
输出:
1
2
3
4
1
2
3
4
正如我们在上面的程序中所看到的,由于t1和t2被视为普通对象而不是线程对象,所以没有发生上下文切换。