推荐答案
在 Java 中,start() 和 run() 方法的主要区别在于它们如何启动线程:
start()方法用于启动一个新线程,并调用run()方法。新线程会独立执行run()方法中的代码。run()方法只是普通的方法调用,不会启动新线程。如果直接调用run()方法,代码将在当前线程中执行。
本题详细解读
start() 方法
- 功能:
start()方法是Thread类的一个方法,用于启动一个新线程。调用start()方法后,JVM 会创建一个新的线程,并在这个新线程中执行run()方法中的代码。 - 线程生命周期:调用
start()方法后,线程会进入“就绪”状态,等待 CPU 调度执行。一旦线程获得 CPU 时间片,run()方法中的代码就会被执行。 - 多次调用:同一个线程对象的
start()方法只能调用一次,多次调用会抛出IllegalThreadStateException异常。
run() 方法
- 功能:
run()方法是Runnable接口中定义的方法,包含了线程实际执行的代码。直接调用run()方法并不会启动新线程,代码会在当前线程中执行。 - 线程生命周期:直接调用
run()方法时,线程不会进入“就绪”状态,代码会立即在当前线程中执行。 - 多次调用:
run()方法可以多次调用,因为它只是一个普通的方法调用,不会影响线程的生命周期。
示例代码
// www.javascriptcn.com code example
class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread is running: " + Thread.currentThread().getName());
}
}
public class Main {
public static void main(String[] args) {
MyThread thread = new MyThread();
// 使用 start() 方法启动新线程
thread.start(); // 输出: Thread is running: Thread-0
// 直接调用 run() 方法
thread.run(); // 输出: Thread is running: main
}
}总结
- 使用
start()方法可以启动一个新线程,并让新线程执行run()方法中的代码。 - 直接调用
run()方法不会启动新线程,代码会在当前线程中执行。