「こんにちは、アミーゴ! スレッドについての学習が大きく進歩しているようですね。」

「結局のところ、それほど難しくはありませんでした。」

それは素晴らしいことです!今日は簡単なレッスンで、トピックは結合方法です。

次の状況を想像してください。メインスレッドが、何らかのタスクを実行するために子スレッドを作成しました。時間が経ち、メインスレッドは子スレッドによって実行された作業の結果を必要とするようになりました。しかし、子スレッドはまだ作業を終えていません。メインスレッドは何をすべきでしょうか?

良い質問。メインスレッドは何をすべきでしょうか?

「これが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();

1 つのスレッドは、2 番目のスレッドの Thread オブジェクトのjoinメソッドを呼び出すことができます。その結果、最初のスレッド (メソッドを呼び出したスレッド) は、2 番目のスレッド (オブジェクトの join メソッドが呼び出されたスレッド) が終了するまで作業を停止します。

ここでは 2 つのことを区別する必要があります。スレッド (別個の実行環境) と Thread オブジェクトです。

"それでおしまい?"

"はい。"

「しかし、なぜスレッドを作成してすぐに完了するまで待たなければならないのでしょうか?」

「すぐにそうする必要はないかもしれません。時間が経ってからかもしれません。最初の子スレッドを開始した後、メインスレッドは、他のスレッドにさらに多くのタスクを割り当てることができます(スレッドを作成してstartメソッドを呼び出すことによって)。作業が残っていないため、最初の子スレッドの結果を処理する必要があります。別のスレッドの作業が完了するまで待機する必要がある場合は、joinメソッドを呼び出す必要があります。」

"とった。"