Java线程的run()和start()有什么区别?
参考答案:
在Java中,线程(Thread)是程序执行流的最小单元,它代表程序的一条执行路径。Java中的Thread类及其实现是创建线程的主要方式。Thread类中有两个重要的方法:run()
和start()
。
这两个方法的主要区别在于它们的行为和用途:
run()
:这是Thread类中的一个普通方法,它包含了线程要执行的代码。当你调用一个线程的run()
方法时,它就在当前的线程中执行。也就是说,run()
方法并不会启动一个新的线程,而是在当前的线程中执行。因此,run()
方法中的代码将按照顺序执行,不会并发执行。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()
方法中的代码,从而实现了并发执行。