上記の例では、Threadクラスのjoinメソッドが何度も使用されています。 join メソッドの機能が何であるかは想像できたと思います。はい、join メソッドの機能は、非同期実行スレッドを同期実行に変えることです。つまり、スレッド インスタンスの start メソッドが呼び出されると、このメソッドはすぐに戻ります。start メソッドの呼び出し後にこのスレッドによって計算された値を使用する必要がある場合は、join メソッドを使用する必要があります。 join メソッドを使用しない場合、start メソッドに続くステートメントの実行時にスレッドが実行されるという保証はありません。 join メソッドを使用した後は、このスレッドが終了するまでプログラムは実行を続行しません。
次のコードは結合の使用法を示しています。
package mythread; public class JoinThread extends Thread { public static volatile int n = 0; public void run() { for (int i = 0; i < 10; i++, n++) try { sleep(3); // 为了使运行结果更随机,延迟3毫秒 } catch (Exception e) { } } public static void main(String[] args) throws Exception { Thread threads[] = new Thread[100]; for (int i = 0; i < threads.length; i++) // 建立100个线程 threads[i] = new JoinThread(); for (int i = 0; i < threads.length; i++) // 运行刚才建立的100个线程 threads[i].start(); if (args.length > 0) for (int i = 0; i < threads.length; i++) // 100个线程都执行完后继续 threads[i].join(); System.out.println("n=" + JoinThread.n); } }
ルーチン 2-8 では、100 個のスレッドが作成され、各スレッドは静的変数 n を 10 ずつ増やします。100 個のスレッドがすべて実行された後に n が出力される場合、n の値は 1000 になるはずです。
1。テスト 1
次のコマンドを使用して、上記のプログラムを実行します:
1 java mythread.JoinThread
プログラムの実行結果は次のとおりです:
1 n=442
この実行結果は、動作環境によって多少の違いがある可能性がありますが、通常、n は等しくありません。上記の結果から、100 個のスレッドがすべて実行された後は n が出力されないことがわかります。
2. テスト 2
次のコマンドを使用して上記のコードを実行します。
上記のコマンド ラインにはパラメータ結合があります。実際、コマンド ラインでは、次のパラメータを使用できます。パラメータが 1 つあります。ここでは Join が使用されており、これらの 100 スレッドの実行を同期するために join メソッドが使用されることを示しています。
プログラムの実行結果は次のとおりです:
1 n=1000
どのようなオペレーティング環境で上記のコマンドを実行しても、同じ結果が得られます: n=1000。 したがって、これは 100 個のスレッドがすべて実行されている必要があることを示しています。 , n は間違いなく 1000 になります。
上記は Java スレッドの join メソッドの使用方法の紹介です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。