📜  JavaThread.start()和Thread.run()的区别(1)

📅  最后修改于: 2023-12-03 15:16:18.770000             🧑  作者: Mango

JavaThread.start()和Thread.run()的区别

在 Java 多线程中,Thread 类提供了一些方法用于启动和控制线程,其中包括 start() 和 run() 方法。本文将探讨这两个方法之间的区别,以及它们如何影响线程的行为。

JavaThread.start()

start() 方法是 Thread 类的一个实例方法,用于启动线程。当调用 start() 方法时,会创建一个新的线程,并在新线程中执行与该 Thread 对象关联的 run() 方法。同时,调用 start() 方法会使当前线程返回,并继续执行下一行代码,而新线程将在后台执行。

示例代码

下面是使用 start() 方法创建并启动一个新线程的示例:

public class MyThread extends Thread {
    public void run() {
        // 在这里编写线程任务
    }
}

MyThread thread = new MyThread();
thread.start();

在上面的代码中,我们创建了一个名为 MyThread 的线程类,它扩展了 Thread 类,并重写了 run() 方法以执行线程任务。然后,我们创建了一个 MyThread 的新实例,并调用它的 start() 方法来启动该线程。

Thread.run()

run() 方法也是 Thread 类的实例方法,但它并不会创建新线程。相反,它只是在当前线程中执行与该 Thread 对象关联的 run() 方法。这意味着如果您调用 run() 方法,线程不会以多线程的方式运行,而只会在当前线程中执行。因此,如果您在主线程中调用 run() 方法,它将会阻塞主线程直到 run() 方法完成执行。

示例代码

以下是使用 run() 方法执行线程任务的示例:

public class MyThread implements Runnable {
    public void run() {
        // 在这里编写线程任务
    }
}

MyThread thread = new MyThread();
thread.run();

在上面的代码中,我们创建了一个名为 MyThread 的线程类,它实现了 Runnable 接口,并重写了 run() 方法以执行线程任务。然后,我们创建了一个 MyThread 的新实例,并调用它的 run() 方法来执行该线程任务。

区别总结

| start() 方法 | run() 方法 | |:-------------:|:-----------:| | 会创建新线程 | 不会创建新线程 | | 在新线程中执行 run() 方法 | 在当前线程中执行 run() 方法 | | 不会阻塞当前线程 | 会阻塞当前线程,直到执行完成 | | 返回后台线程控制权 | 返回当前线程控制权 |

结论

在多线程编程中,我们通常使用 start() 方法来启动线程,并让它在后台执行与 Thread 对象关联的 run() 方法。如果您调用 run() 方法,它会在当前线程中以单线程方式执行,不会创建新线程。因此,在编写多线程应用程序时,应当谨慎使用 run() 方法,除非您确定需要在当前线程中执行线程任务,否则应该始终使用 start() 方法来启动新线程。