package com.nacre.test7;
public class TestDaemon {
public static void main(String[] args) throws InterruptedException {
MyDaemon dt=new MyDaemon();
if(dt.isDaemon()){
System.out.println(dt+"is demon thread");
Thread.sleep(1000);
System.out.println(" main thread is ending.");
}
}
}
package com.nacre.test7;
public class MyDaemon implements Runnable{
Thread thrd;
MyDaemon() {
thrd=new Thread(this);
thrd.setDaemon(true);
thrd.start();
}
public boolean isDaemon(){
return thrd.isDaemon();
}
public void run() {
try { while(true) {
System.out.print(".");
//Thread.sleep(100);
}
} catch(Exception exc) {
System.out.println("MyDaemon interrupted.");
}
}
}
上記の 2 つのクラスでは、プログラムの各行にブレークポイントを設定しました。Eclipse エディターでデバッグを開始したところ、制御フローは ....thrd を実行した後、以下のコードに戻ってきました。 MyDaemon クラスの .start() メソッド
if(dt.isDaemon()){
System.out.println(dt+"is demon thread");
Thread.sleep(1000);
System.out.println(" main thread is ending.");
}
そして今、コントロールはこの下の部分に行きます
public void run() {
try { while(true) {
System.out.print(".");
Thread.sleep(100);
}
} catch(Exception exc) {
System.out.println("MyDaemon interrupted.");
}
私が知っていたのは、start() メソッドが呼び出されると、同時に jvm が新しいスレッドを作成して run メソッドを呼び出すことです。私の疑問は、デバッグ中に run メソッドの実行を確認できない理由と、次の出力を取得する方法です。
com.nacre.test7.MyDaemon@152b6651is デーモン スレッド ........... メイン スレッドが終了しています。