“你好,阿米戈!我看到你在学习线程方面取得了长足的进步。”

“毕竟不是很难。”

太好了!今天的课程内容很简单,主题是 join 方法。

想象以下情景:主线程创建了一个子线程来执行某项任务。一段时间之后,主线程需要由子线程执行的工作的结果。但是子线程尚未完成工作。主线程应该做什么?

好问题。主线程应该做什么?

“这正是 join 方法的用途。通过该方法,我们可以让一个线程等待另一个线程完成工作:”

代码 说明
class Printer implements Runnable
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("I’m " + this.name);
}
}
实现 Runnable 接口的类。
public static void main(String[] args)
{
Printer printer1 = new Printer("Nick");
Thread thread1 = new Thread(printer1);
thread1.start();

thread1.join();
}
主线程创建子线程 – thread1

接下来通过调用 thread1.start(); 启动该线程

然后等待它完成 – thread1.join();

一个线程可以在第二个线程的 Thread 对象上调用 join 方法。结果是,第一个线程(称为方法)停止工作,直至第二个线程(其对象的 join 方法被调用)完成。

在这里我们需要区分两个地方:我们有一个线程(一个单独的执行环境),我们还有一个 Thread 对象。

“完了?”

“是的。”

“但是我们为什么必须创建一个线程,然后立即等待它完成呢?”

“可能不需要立即完成。可能要经过一段时间。启动第一个子线程后,主线程可以将更多任务分配给其他线程(通过创建这些线程并调用 start 方法)。然后,当它没有任何工作要做时,它需要处理第一个子线程的结果。每当你需要等待另一个线程完成工作时,就需要调用 join 方法。”

“我明白了。”