上記の例では、Threadクラスのjoinメソッドが何度も使用されています。 join メソッドの機能が何であるかは想像できたと思います。はい、join メソッドの機能は、非同期実行スレッドを同期実行に変えることです。つまり、スレッド インスタンスの start メソッドが呼び出されると、このメソッドはすぐに戻ります。start メソッドの呼び出し後にこのスレッドによって計算された値を使用する必要がある場合は、join メソッドを使用する必要があります。 join メソッドを使用しない場合、start メソッドに続くステートメントの実行時にスレッドが実行されるという保証はありません。 join メソッドを使用した後は、このスレッドが終了するまでプログラムは実行を続行しません。次のコードは、結合の使用法を示しています。
次のようにコードをコピーします。
パッケージの mythread;
パブリッククラス JoinThread は Thread を拡張します
{
パブリック静的 int n = 0;
静的同期 void inc()
{
n++;
}
public void run()
{
for (int i = 0; i < 10; i++)
試す
{
inc();
sleep(3); // 実行結果をよりランダムにするために、3 ミリ秒遅延します。
}
catch (例外 e)
{
}
}
public static void main(String[] args) が例外をスローする
{
スレッド thread[] = 新しいスレッド [100];
for (int i = 0; i < thread.length; i++) // 100 個のスレッドを作成します
スレッド[i] = 新しい JoinThread();
for (int i = 0; i < thread.length; i++) // 作成したばかりの 100 個のスレッドを実行します
スレッド[i].start();
if (引数の長さ > 0)
for (int i = 0; i < thread.length; i++) // 100 個のスレッドがすべて実行された後に続行
スレッド[i].join();
System.out.println("n=" + JoinThread.n);
}
}
ルーチン 2 ~ 8 では、100 個のスレッドが作成され、各スレッドは静的変数 n を 10 ずつ増やします。 100 個のスレッドがすべて実行された後に n が出力される場合、n の値は 1000 になるはずです。
1. テスト1
上記のプログラムを実行するには、次のコマンドを使用します。
次のようにコードをコピーします。
java mythread.JoinThread
プログラムを実行した結果は次のようになります。
次のようにコードをコピーします。
n=442
この実行結果は、実行環境が異なると多少の差異が生じる可能性がありますが、通常、n は 1000 に等しくなりません。上記の結果から、100 個のスレッドがすべて実行される前に n が出力されることがわかります。
2. テスト2
次のコマンドを使用して上記のコードを実行します。
実際、上記のコマンド ラインにはパラメータ join がありますが、パラメータが 1 つあれば、コマンド ラインで任意のパラメータを使用できます。これは、join メソッドが実行を同期するために使用されることを示すためだけに使用されています。この 100 のスレッド。
プログラムを実行した結果は次のようになります。
次のようにコードをコピーします。
n=1000
どのようなオペレーティング環境で上記のコマンドを実行しても、同じ結果 (n=1000) が得られます。これは、100 個のスレッドすべてが実行されている必要があることを完全に示しており、したがって、n は 1000 に等しい必要があります。