为什么在 1 那里初始化t1就不是后台线程
而在 2 那里初始化是后台线程呢?

解决方案 »

  1.   

    我先解释一下 为什么在 2 的位置生成的线程是后台线程。
    因为DaemonTest本身是继承了Thread ,
    也就是说 DaemonTest 是一个线程。
    在DaemonTest的构造方法里调用了setDaemon(true); ,
    是将DaemonTest 这个线程对象设置为后台线程了。然后调用了start(); ,
    去执行run 方法,
    在run方法里生成了一个新的线程对象,然后将t1指向了它。
    由后台线程生成的线程默认还是后台线程。
    所以输出为true。再解释下 为什么在 1 的位置生成的线程就不是后台线程。
    首先main方法被执行,这本身就是一个线程,而这个线程不是后台线程。
    main方法执行 new DaemonTest(); ,在DaemonTest的构造方法里,
    执行t1=new Thread(); ,生成一个线程,
    这个是main方法的那个线程生成的新线程,
    所以默认的还是非后台线程。