Java 线程的 run() 和 start() 有什么区别?
在 Java 中,run()
和 start()
是 Thread
类中两个重要的方法,它们有以下区别:
-
run() 方法:
run()
方法定义了线程的主体,包含了线程要执行的代码。- 当直接调用
run()
方法时,它在当前线程的上下文中执行,而不会创建新的线程。因此,代码会在当前线程中同步执行,而不是并发执行。
-
start() 方法:
start()
方法用于启动线程,它会创建一个新的线程,并在新线程的上下文中执行run()
方法中的代码。- 调用
start()
方法后,新线程会异步执行run()
方法中的代码,使得线程能够并发执行。
下面是一个简单的示例,演示了 run()
和 start()
的区别:
public class RunVsStartExample {public static void main(String[] args) {// 创建一个线程实例MyThread myThread = new MyThread();// 调用 run() 方法,代码在当前线程执行,不会创建新线程myThread.run();// 调用 start() 方法,创建新线程并异步执行 run() 方法myThread.start();}// 自定义线程类static class MyThread extends Thread {public void run() {for (int i = 0; i < 5; i++) {System.out.println(Thread.currentThread().getName() + ": " + i);}}}
}
在上述示例中,调用 myThread.run()
不会创建新线程,而是在主线程中同步执行。调用 myThread.start()
创建了一个新的线程,并异步执行了 run()
方法,使得线程能够并发执行。注意,直接调用 run()
方法并不会实现多线程的效果。