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 恶魔线程............主线程正在结束。