“你好,阿米戈!我看到你在學習線程方面取得了長足的進步。”

“畢竟沒那麼難。”

那太棒了!今天給大家上一節簡單的課,主題是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 方法

“知道了。”