Java 中 start() 和 run() 方法的区别是什么?

· 约 3 分钟读完 · 第 53 / 274 章

推荐答案

在 Java 中,start() 和 run() 方法的主要区别在于它们如何启动线程:

  • start() 方法用于启动一个新线程,并调用 run() 方法。新线程会独立执行 run() 方法中的代码。
  • run() 方法只是普通的方法调用,不会启动新线程。如果直接调用 run() 方法,代码将在当前线程中执行。

本题详细解读

start() 方法

  • 功能:start() 方法是 Thread 类的一个方法,用于启动一个新线程。调用 start() 方法后,JVM 会创建一个新的线程,并在这个新线程中执行 run() 方法中的代码。
  • 线程生命周期:调用 start() 方法后,线程会进入“就绪”状态,等待 CPU 调度执行。一旦线程获得 CPU 时间片,run() 方法中的代码就会被执行。
  • 多次调用:同一个线程对象的 start() 方法只能调用一次,多次调用会抛出 IllegalThreadStateException 异常。

run() 方法

  • 功能:run() 方法是 Runnable 接口中定义的方法,包含了线程实际执行的代码。直接调用 run() 方法并不会启动新线程,代码会在当前线程中执行。
  • 线程生命周期:直接调用 run() 方法时,线程不会进入“就绪”状态,代码会立即在当前线程中执行。
  • 多次调用:run() 方法可以多次调用,因为它只是一个普通的方法调用,不会影响线程的生命周期。

示例代码

总结

  • 使用 start() 方法可以启动一个新线程,并让新线程执行 run() 方法中的代码。
  • 直接调用 run() 方法不会启动新线程,代码会在当前线程中执行。