在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多线程编程的基本概念和使用方法。