“你好,阿米戈!我看到你在学习线程方面取得了长足的进步。”
“毕竟不是很难。”
太好了!今天的课程内容很简单,主题是 join 方法。
想象以下情景:主线程创建了一个子线程来执行某项任务。一段时间之后,主线程需要由子线程执行的工作的结果。但是子线程尚未完成工作。主线程应该做什么?
好问题。主线程应该做什么?
“这正是 join 方法的用途。通过该方法,我们可以让一个线程等待另一个线程完成工作:”
代码 | 说明 |
---|---|
|
实现 Runnable 接口的类。 |
|
主线程创建子线程 – thread1。
接下来通过调用 thread1.start(); 启动该线程 然后等待它完成 – thread1.join(); |
一个线程可以在第二个线程的 Thread 对象上调用 join 方法。结果是,第一个线程(称为方法)停止工作,直至第二个线程(其对象的 join 方法被调用)完成。
在这里我们需要区分两个地方:我们有一个线程(一个单独的执行环境),我们还有一个 Thread 对象。
“完了?”
“是的。”
“但是我们为什么必须创建一个线程,然后立即等待它完成呢?”
“可能不需要立即完成。可能要经过一段时间。启动第一个子线程后,主线程可以将更多任务分配给其他线程(通过创建这些线程并调用 start 方法)。然后,当它没有任何工作要做时,它需要处理第一个子线程的结果。每当你需要等待另一个线程完成工作时,就需要调用 join 方法。”
“我明白了。”
GO TO FULL VERSION