根据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末尾阻止关闭。

09-10 07:30
查看更多