Java 中 Thread 类的 start() 和 run() 方法区别解析

Java Q&A Hub 使用 GPT-4o-mini 回答

问题:

Thread 类中的start() 和 run() 方法有什么区别?

回答:

在 Java 中,Thread 类的 start() 方法和 run() 方法有着重要的区别,理解这两者的区别对于正确使用多线程编程至关重要。

  1. start() 方法

    • start() 方法是用来启动一个新线程的。当你调用 start() 方法时,JVM 会创建一个新的线程,并调用该线程的 run() 方法。
    • 调用 start() 方法后,新的线程会并发执行,而调用 start() 方法的线程(通常是主线程)会继续执行。
    • 你不能直接调用 start() 方法来执行 run() 方法,因为这样会导致 run() 方法在当前线程中执行,而不是在新线程中执行。

    示例:

    Thread thread = new Thread(new MyRunnable());
    thread.start(); // 启动新线程
    
  2. run() 方法

    • run() 方法是线程的执行体,包含了线程执行的代码。当你直接调用 run() 方法时,它不会启动新线程,而是会在当前线程中执行 run() 方法的代码。
    • 直接调用 run() 方法就像调用普通的方法一样,不会创建新的线程。

    示例:

    Thread thread = new Thread(new MyRunnable());
    thread.run(); // 在当前线程中执行,不会启动新线程
    

总结

  • 使用 start() 方法来启动一个新线程,run() 方法会在新线程中执行。
  • 直接调用 run() 方法会在当前线程中执行,不会创建新线程。

因此,正确的使用方式是始终通过 start() 方法来启动线程,而不是直接调用 run() 方法。