1. 调用 start()
方法
当你调用线程对象的 start()
方法时,Java 虚拟机(JVM)会为该线程分配必要的资源,创建一个新的线程,并且让这个新线程执行 run()
方法里的代码。此过程是异步的,也就是说,调用 start()
方法后,程序不会等待新线程执行完毕,而是会继续执行后续代码。
以下是调用 start()
方法的示例代码:
class MyThread extends Thread {
@Override
public void run() {
System.out.println("线程执行: " + Thread.currentThread().getName());
}
}
public class StartExample {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
System.out.println("主线程继续执行");
}
}
在这个例子中,调用 thread.start()
方法后,JVM 会创建一个新线程并执行 run()
方法,而主线程会继续执行 System.out.println("主线程继续执行");
这行代码。
2. 调用 run()
方法
若直接调用线程对象的 run()
方法,它就和调用普通的方法一样,不会创建新线程。run()
方法里的代码会在当前线程中执行,也就是调用 run()
方法的线程。这种情况下,程序会等待 run()
方法执行完毕后,才会继续执行后续代码。
以下是调用 run()
方法的示例代码:
class MyThread extends Thread {
@Override
public void run() {
System.out.println("线程执行: " + Thread.currentThread().getName());
}
}
public class RunExample {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.run();
System.out.println("主线程继续执行");
}
}
在这个例子中,调用 thread.run()
方法时,run()
方法里的代码会在主线程中执行,主线程会等待 run()
方法执行完毕后,才会继续执行 System.out.println("主线程继续执行");
这行代码。
总结
start()
方法:会创建新线程,让新线程执行run()
方法里的代码,实现异步执行。run()
方法:只是一个普通方法,在当前线程中执行,不会创建新线程,是同步执行。