守护 ThreadGroup

x33g5p2x  于2022-03-28 转载在 其他  
字(1.0k)|赞(0)|评价(0)|浏览(237)

一 点睛

线程可以设置为守护线程,ThreadGroup 也可以设置为守护 ThreadGroup,但是若将一个 ThreadGroup 设置为 deamon,也并不会影响线程的 daemon 属性,如果一个 ThreadGroup 的 daemon 被设置为 true,那么在 group 中没有任何 active 线程的时候,该 group 将自动 destroy。

二 代码

package concurrent.threadgroup;

import java.util.concurrent.TimeUnit;

public class ThreadGroupDaemon {
    public static void main(String[] args) {
        ThreadGroup group1 = new ThreadGroup("Group1");
        new Thread(group1, () -> {
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "group1-thread1").start();

        ThreadGroup group2 = new ThreadGroup("Group2");
        new Thread(group2, () -> {
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "group2-thread1").start();

        group2.setDaemon(true);

        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(group1.isDestroyed());
        System.out.println(group2.isDestroyed());
    }
}

三 测试

false

true

四 说明

第二 group 的 daemon 被设置为 true,当其中没有 active 线程的时候,该 group 将会自动被 destroy,而第一个 group 则相反。

相关文章