个性化阅读
专注于IT技术分析

如果我们直接调用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
 }
}

立即测试

Output:running...
主线程堆栈

如果你直接调用run()方法会出现问题

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将被视为普通对象而不是线程对象。
赞(0)
未经允许不得转载:srcmini » 如果我们直接调用run()方法而不是start()方法怎么办?

评论 抢沙发

评论前必须登录!