start 方法和 run 方法的主要区别是什么?
start()
方法和run()
方法都是Thread
类的方法,它们的主要区别在于如何执行线程的任务:
start()
方法:当调用start()
方法时,Java虚拟机会创建一个新的线程,并为该线程分配新的系统资源和调用栈,然后调用线程的run()
方法。这样,run()
方法就会在新的线程中执行,实现了多线程的目的。-
run()
方法:如果直接调用线程的run()
方法,那么run()
方法将在当前线程中执行,而不会启动新的线程。这样,实际上你的程序将变成单线程,无法实现并发执行。
所以,如果你想创建并启动一个新的线程,你应该调用start()
方法,而不是直接调用run()
方法。以下是一个简单的例子,展示了start()
方法和run()
方法的区别:
public class StartRunExample {
public static void main(String[] args) {
Thread task = new Thread(() -> {
System.out.println("Task is running in thread: " + Thread.currentThread().getName());
});
// 直接调用 run() 方法
task.run(); // 输出:Task is running in thread: main
// 使用 start() 方法启动线程
task = new Thread(() -> {
System.out.println("Task is running in thread: " + Thread.currentThread().getName());
});
task.start(); // 输出:Task is running in thread: Thread-0
}
}
在这个例子中,我们创建了一个线程task
,它的任务是打印当前线程的名称。当我们直接调用task.run()
时,任务在主线程中执行。当我们调用task.start()
时,任务在新的线程中执行。这就是start()
方法和run()
方法的主要区别。