线程的run()和start()有什么区别?

run() 方法:

run() 方法是 Thread 类的一个普通方法,用于定义线程的主体逻辑。当直接调用 run() 方法时,该方法会在当前线程的上下文中执行,而不会创建新的线程。

直接调用 run() 方法,不会实现多线程的并发执行,而只是在当前线程中按照顺序执行 run() 方法的内容。

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 线程的主体逻辑
        System.out.println("Running in thread: " + Thread.currentThread().getName());
    }
}
 
public class Main {
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        myRunnable.run(); // 在当前线程中执行 run() 方法
    }
}

start() 方法:

start() 方法是 Thread 类的一个方法,用于启动一个新的线程。当调用 start() 方法时,会创建一个新的线程,并在新线程的上下文中执行 run() 方法的内容。

直接调用 start() 方法会导致新线程的创建和执行,实现多线程并发执行。

public class MyThread extends Thread {
    @Override
    public void run() {
        // 线程的主体逻辑
        System.out.println("Running in thread: " + Thread.currentThread().getName());
    }
}
 
public class Main {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start(); // 启动一个新的线程,执行 run() 方法
    }
}

区别总结:
run() 方法是定义线程主体逻辑的普通方法,当直接调用时,它在当前线程的上下文中执行,而不会创建新的线程。
start() 方法是启动一个新线程的方法,当调用时,它会创建一个新的线程,并在新线程的上下文中执行 run() 方法的内容,实现多线程并发执行。
直接调用 run() 方法不会创建新线程,只是在当前线程中按顺序执行 run() 方法的内容,不具备多线程的特性。
在使用多线程时,通常应该调用 start() 方法来启动新线程,以实现并发执行,而不是直接调用 run() 方法。

结语

在Java中,run() 方法和 start() 方法代表着多线程编程的两种不同方式。run() 作为线程的主体逻辑定义,当直接调用时在当前线程中执行;而 start() 用于启动新线程,创建新的执行上下文,并在其中执行 run() 方法,实现多线程的并发执行。正确使用这两个方法是编写高效、可靠多线程代码的关键。在设计多线程应用时,请根据需求选择适当的方式,确保线程安全和良好的性能。希望通过对 run() 和 start() 的深入理解,你能够更加自信和熟练地处理多线程编程的挑战。

posted @ 2024-09-28 19:31  又一岁荣枯  阅读(31)  评论(0编辑  收藏  举报