2016-12-17 1 views
-2

スレッドについて学びたいと思っています。 以下をご覧くださいTAE -どのスレッドがその行を呼び出していますか?

public static void main(String [] args) { // line 1 
    Thread exampleThread = new Thread() { // line 2 
     public void run() {     // line 3 
     //some code      // line 4 
     ...........      // line 5 
     ...........      // line 6 
     }         // line 7 
    };          // line 8 
              // line 9 
    // Which thread invokes this line?  // line 10 
    exampleThread.start();     // line 11 
              // line 12 
    // Which thread invokes this line?  // line 13 
    exampleThread.join();     // line 14 
}           // line 15 

私はメインスレッドがライン11を呼び出すと思います。

しかし、何について行14?どのスレッドが呼び出していますか? メインまたは例スレッド?説明していただけますか?

+0

両方とも同じ '呼び出し側'スレッドである。呼び出しスレッドはexampleThreadを開始し、joinを呼び出すと呼び出しが完了するまで待機します。exampleThreadが完了するまで呼び出しスレッドをブロックしています。スレッドを開始する前にシステム時間を印刷して、次にスレッドのロジックを2秒間スリープさせ、最後にもう一度タイムアウトを表示すると、すぐに戻ることなく2秒間ブロックされた呼び出しスレッドが表示されるはずですと呼ばれていました。 –

答えて

1

exampleThread.join()もメインスレッドによって呼び出されます。

これは、他のスレッド(exampleThread)が完了するまで、呼び出し元のスレッド(ここのメインスレッド)をブロックします。

通常、一連の命令は常に同じスレッドによって実行されます。他のスレッドがジャンプして引き継ぐ方法はありません(ただし、同じオブジェクトインスタンス上であっても、複数のスレッドが同時に同じ命令シーケンスを実行する可能性があります)。

関連する問題