如果我们直接用Java调用run()方法会怎样?

直接调用Thread对象的 run()方法不会启动单独的线程,而是可以在当前线程中执行。若要从单独的线程中执行Runnable.run,请执行以下任一操作

  • 使用Runnable对象构造一个线程,并在Thread上调用start() 方法。

  • 定义Thread对象的子类,并覆盖其run() 方法的定义。然后构造该子类的实例,并直接在该实例上调用start()方法。

示例

public class ThreadRunMethodTest {
   public static void main(String args[]) {
      MyThread runnable = new MyThread();
      runnable.run(); // Call to run() method does not start a separate thread
      System.out.println("Main Thread");
   }
}
class MyThread extends Thread {
   public void run() {
      try {
         Thread.sleep(1000);
      } catch (InterruptedException e) {
         System.out.println("子线程中断。");
      }
      System.out.println("Child Thread");
   }
}

在上面的示例中,主线程ThreadRunMethodTest使用该方法调用子线程MyThreadrun()。这将导致子线程在执行主线程的其余部分之前运行完毕,以便在“主线程”之前打印“线程”。

输出结果

Child Thread
Main Thread