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.start()方法MyDaemon類誰在調用run()方法
if(dt.isDaemon()){
System.out.println(dt+"is demon thread");
Thread.sleep(1000);
System.out.println(" main thread is ending.");
}
和noway控制後,將會在下面這個部分
public void run() {
try { while(true) {
System.out.print(".");
Thread.sleep(100);
}
} catch(Exception exc) {
System.out.println("MyDaemon interrupted.");
}
我知道什麼是當調用start()方法時,同時調用jvm調用創建一個新的線程上運行的方法,我的疑問是,爲什麼我無法看到的run方法的執行,同時調試 ,我如何得到以下輸出
[email protected]妖線程 ..........主線程正在結束。
你給出的圖片顯示的是public void run()方法,但是現在它顯示的是控制進入run()方法,就像類中的其他語句..........那是什麼我在問。 – rajeev
你將無法看到。原因主線程在執行最後一條語句後就會死亡。所以現在你已經失去了調試器。 如果您想在運行方法中看到該控件,請將睡眠時間增加到1,00,000毫秒,然後在運行方法中放置一個調試點。它的工作原理 – dharam
此外,當主線程喚醒時它會死掉,然後你將再次失去調試器。調試器不可用於hte守護進程線程執行 – dharam