2016-03-31 6 views
1

以下のコードでは、メインスレッドが子スレッドが終了するまで待機するのはなぜですか?メインスレッドはなぜ待機するのですか

Driver.java

public class Driver { 
public static void main(String[] args) throws InterruptedException { 
    Thread t = new Thread(new ThreadRunner()); 
    t.start(); 
} 
} 

ThreadRunner.java

ここでドライバーのクラスで
public class ThreadRunner implements Runnable { 
@Override 
public void run() { 
    for (int i = 0; i < 10; i++) { 
     System.out.println("Child thread" + i); 
    } 
} 
} 

't.startを()' 呼び出した後にプログラムが終了するべきではないのですか?私は結合を使用していませんが、メインスレッドは新しくスピンされた 'ThreadRunner'の実行が実行されるまで待機します。それはJavaで(メインメソッドで起動される)メインスレッドは、すべてのスレッドが終了するまで常に待機しているからですか?

答えて

5

メインスレッドは他のスレッドを開始した直後に終了しますが、Javaプログラムは非デーモンスレッドが存続していれば実行を継続します(そして、特に要求しない限り、新しいスレッドは非デーモンになります)。

スレッドをデーモンスレッドにするのは簡単です。起動する前にt.setDaemon(true);と呼ぶだけです。

2

メインスレッドは実際には待機しません。メインスレッドは完了する。デーモンではないThreadを作成するため、プログラムは終了しません。デーモンスレッドだけが残っていると、JVMはシャットダウンします。

-1

'System.out.println( "メインスレッド");'を追加できます。下の 't.start()'

メインスレッドが最初に表示されます。