📜  java 多线程直接调用run()方法会怎样?

📅  最后修改于: 2020-09-27 01:10:57             🧑  作者: Mango

如果我们直接调用run()方法而不是start()方法怎么办?

每个线程都在单独的调用堆栈中启动。从主线程调用run()方法,run()方法转到当前调用堆栈,而不是新调用堆栈的开头。


class TestCallRun1 extends Thread{
 public void run(){
   System.out.println("running...");
 }
 public static void main(String args[]){
  TestCallRun1 t1=new TestCallRun1();
  t1.run();//fine, but does not start a separate call stack
 }
}


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();
 }
}
Output:1
       2
       3
       4
       5
       1
       2
       3
       4
       5
 

如您在上面的程序中看到的,没有上下文切换,因为在这里t1和t2将被视为普通对象而不是线程对象。