在 Java 中,Thread
类的 run
方法和 start
方法有着重要的区别。以下是它们的主要区别:
-
方法的目的:
start
方法的目的是启动一个新线程。调用start
方法会创建一个新的线程,并在新的线程中执行run
方法。run
方法的目的是定义线程的执行代码。它包含了线程在运行时要执行的任务,但并不是直接调用它来启动线程。
-
调用方式:
- 当你调用
start
方法时,JVM 会分配新的资源和启动一个新的线程。在这个新线程中,run
方法会被自动调用。 - 调用
run
方法则只是以普通方法的方式执行,没有启动新线程,而是在当前线程中执行run
方法的代码。
- 当你调用
-
线程状态:
- 调用
start
方法后,线程的状态会变成RUNNABLE
,并且会被操作系统调度来执行。 - 如果只调用
run
方法,线程的状态不会变,仍然是调用run
方法的那个线程的状态。
- 调用
4.作用功能:
1.run方法的作用是描述线程具体要执行的任务;
2.start方法的作用是真正的去申请系统线程
5.运行结果:
1. run方法是一个类中的普通方法,主动调用和调用普通方法一样,会顺序执行一次;
2.start调用方法后, start方法内部会调用Java 本地方法(封装了对系统底层的调用)真正的启动线程,并执行run方法中的代码,run 方法执行完成后线程进入销毁阶段。
class MyThread extends Thread {
@Override
public void run() {
System.out.println("线程正在运行");
}
}
public class Main {
public static void main(String[] args) {
MyThread thread = new MyThread();
// 启动一个新线程
thread.start(); // 这将创建一个新的线程并在其中调用 run 方法
// 直接调用 run 方法
thread.run(); // 这将在主线程中执行,不会创建新线程
}
}
在上面的示例中,thread.start() 将会创建一个新的线程,而 thread.run() 仅在主线程中运行。