跳到主要内容

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

参考答案:

在Java中,线程(Thread)是程序执行流的最小单元,它代表程序的一条执行路径。Java中的Thread类及其实现是创建线程的主要方式。Thread类中有两个重要的方法:run()start()

这两个方法的主要区别在于它们的行为和用途:

  1. run():这是Thread类中的一个普通方法,它包含了线程要执行的代码。当你调用一个线程的run()方法时,它就在当前的线程中执行。也就是说,run()方法并不会启动一个新的线程,而是在当前的线程中执行。因此,run()方法中的代码将按照顺序执行,不会并发执行。
  2. start():这是Thread类中的一个native方法,用于启动一个新的线程。当你调用一个线程的start()方法时,Java虚拟机(JVM)会创建一个新的线程,并调用该线程的run()方法。因此,start()方法会启动一个新的线程来执行run()方法中的代码,这样就可以实现并发执行。

简单来说,run()方法是线程要执行的代码,而start()方法是启动线程来执行这些代码的方法。你不能直接调用run()来启动线程,而应该调用start()来启动线程,让JVM自动调用run()方法。

这里有一个简单的例子来说明这个区别:

public class MyThread extends Thread {
    @Override
    public void run() {
        // 这是线程要执行的代码
        System.out.println("Hello from a new thread!");
    }

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        // 使用start()方法启动线程
        myThread.start();

        // 注意:这里不能直接调用run()方法,因为这样会在当前线程中执行run()方法,而不是启动一个新的线程。
        // myThread.run();
    }
}

在这个例子中,我们创建了一个继承自Thread类的自定义线程类MyThread,并重写了run()方法来包含线程要执行的代码。然后,在main()方法中,我们创建了一个MyThread的实例,并使用start()方法启动了这个线程。这样,JVM就会创建一个新的线程来执行run()方法中的代码,从而实现了并发执行。