根据Java,当setDaemon设置为true时
它不会阻止JVM
程序结束时退出,但是
线程仍在运行。一个
守护程序线程的示例是
垃圾收集。
从下面的代码示例中,当setDaemon
设置为true时,由主线程创建的线程停止执行,实际上它应该继续运行。当setDaemon
设置为false时,即使退出主线程,子线程的打印值也为i。
请澄清我的疑问。
public class DeamonSample implements Runnable
{
public void run()
{
try
{
System.out.println("T1 started...");
for (int i=0;i<1000;i++)
{
TimeUnit.SECONDS.sleep(1);
System.out.print(i+" ");
}
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
System.out.println("T1 ended...");
}
}
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
System.out.println("Main Started...");
System.out.println("Main Thread Type="+Thread.currentThread().isDaemon());
DeamonSample deamonSample=new DeamonSample();
Thread t1=new Thread(deamonSample);
t1.setDaemon(true);
t1.start();
System.out.println("T1 Type="+t1.isDaemon());
System.out.println("Main Thread Type="+Thread.currentThread().isDaemon());
System.out.println("Main ended...");
}
}
最佳答案
默认情况下,线程不是守护程序线程。如果使用不是守护程序的任何线程到达主线程的末尾,则该进程将继续运行。通过调用setDaemon(true)
,您告诉JVM您的线程不应在main末尾阻止关闭。