在Java中,Thread类和Runnable接口是实现多线程编程的两个基本方式。Thread类提供了两个重要的方法:start()和run()。虽然这两个方法都与线程的执行有关,但它们有着本质的区别。
run() 方法
- 定义:
run()方法是Thread类和Runnable接口中的一个方法,用于定义线程的执行逻辑。 - 调用方式:
run()方法可以直接调用,就像调用普通方法一样。 - 行为:直接调用
run()方法不会创建新的线程,而是在当前线程中执行run()方法的代码。
示例代码
public class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " - " + i);
try {
Thread.sleep(1000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.run(); // 直接调用run()方法
}
}
在这个示例中,thread.run()会在主线程中执行run()方法的代码,而不是创建新的线程。
start() 方法
- 定义:
start()方法是Thread类中的一个方法,用于启动一个新的线程。 - 调用方式:
start()方法必须调用,以启动新的线程。 - 行为:调用
start()方法会创建一个新的线程,并在新的线程中执行run()方法的代码。
示例代码
public class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " - " + i);
try {
Thread.sleep(1000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start(); // 调用start()方法启动新线程
}
}
在这个示例中,thread.start()会创建一个新的线程,并在新的线程中执行run()方法的代码。
区别总结
-
run()方法:- 定义线程的执行逻辑。
- 可以直接调用,不会创建新的线程。
- 在当前线程中执行
run()方法的代码。
-
start()方法:- 用于启动新的线程。
- 必须调用,以创建新的线程。
- 在新的线程中执行
run()方法的代码。
注意事项
- 直接调用
run()方法不会启动新的线程,而是会在当前线程中执行run()方法的代码,这通常不是预期的行为。 - 调用
start()方法会启动新的线程,并在新的线程中执行run()方法的代码,这是创建和启动线程的正确方式。
通过理解start()和run()方法的区别,可以更好地掌握Java多线程编程的基本概念和使用方法。

被折叠的 条评论
为什么被折叠?



