class Counter implements Runnable{ @Override
public void run() {
for (int i = 0; ; i++) {
//System.out.println(Thread.currentThread().getThreadGroup().getName()+":"+i);
}
}
}public class Test{

public static void main(String[] args) {
ThreadGroup threadGroup = new ThreadGroup("守护线程组");
threadGroup.setDaemon(true);
Thread thread= new Thread(threadGroup, new Thread(new Counter()), "计数器线程-1");
thread.start();

System.out.println(thread.isDaemon());//为什么依然是false
}
}

解决方案 »

  1.   

    默认值就是false,你也没进行设置,当然还是false。
      

  2.   

    两点结论和误区:
    1、守护线程组中的线程不一定是守护线程
    2、线程是否为守护线程需要线程本身start前设定,和线程组无关
    守护线程组
    守护线程组最后一个线程停止或最后一个线程组被销毁时自动销毁,这是将线程组设置为守护的原因JDK源码分析public Thread(ThreadGroup group, Runnable target, String name) {
            init(group, target, name, 0);
        }
    这是线程附带线程组的构造方法,会执行init方法
    在构造方法上面有这样一段注释
    这段注释的意思就是,新创建的线程被初始化标记为守护线程,当且仅当线程被标记为守护线程,可通过setDaemon方法设置,可能有点绕,不过不难理解
    希望对你有点帮助
      

  3.   

    thread.setDaemon(true);
     才是吧,你这set的不是线程组吗?