join()
和 start()
是 Java 中用于管理线程的两个重要方法,它们属于 Thread
类的成员方法。
1. start()
start()
方法用于启动一个线程,使其开始执行。一旦调用了 start()
方法,线程将会在后台运行,直到其执行完毕或被手动中断。
Thread myThread = new Thread(new MyRunnable());
myThread.start();
2. join()
join()
方法用于等待调用该方法的线程(比如主线程)等待被调用的线程(比如 myThread
)执行完毕。换句话说,调用了 join()
方法的线程将会被阻塞,直到被调用的线程执行完毕。
Thread myThread = new Thread(new MyRunnable());
myThread.start();
try {
myThread.join(); // 主线程等待 myThread 执行完毕
} catch (InterruptedException e) {
e.printStackTrace();
}
在上述示例中,主线程调用了 myThread.join()
,这意味着主线程将等待 myThread
执行完毕后再继续执行。
示例
以下是一个使用 start()
和 join()
的示例:
class MyRunnable implements Runnable {
@Override
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.println("Count: " + i);
try {
Thread.sleep(1000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) {
Thread myThread = new Thread(new MyRunnable());
myThread.start();
try {
myThread.join(); // 主线程等待 myThread 执行完毕
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Main thread finished.");
}
}
在这个示例中,MyRunnable
类实现了 Runnable
接口,它将在后台线程中执行一个简单的循环,打印计数器并休眠1秒。
在 Main
类中,我们创建了一个新线程 myThread
并调用了 start()
方法来启动它。接着,主线程调用了 myThread.join()
来等待 myThread
的执行完毕。一旦 myThread
完成,主线程将继续执行并打印 “Main thread finished.”。
这样可以保证在主线程继续执行之前,myThread
必须执行完毕。