线程组,守护线程,用户线程的简单了解

线程组

使用线程组可以方便管理线程

		ThreadGroup threadGroup = new ThreadGroup("threadGroup_1");//创建一个线程组
        Thread t1 = new Thread(threadGroup, new MyThtead(),"t1");//创建线程并将其命名加入线程组

为线程组添加一个父线程

ThreadGroup threadGroup2 = new ThreadGroup(threadGroup,"threadGroup_2");

如果没有手动添加父线程组系统自动获取当前主线程的线程组(main)作为默认父线程组。
批量停止线程只需要停止线程所在的线程组
中断方法

threadGroup.interrupt();

守护线程与用户线程

守护线程是一种特殊的线程,在后台默默地完成一些系统性的服务,比如垃圾回收线程、JIT线程都是守护线程。与之对应的是用户线程,用户线程可以理解为是系统的工作线程,它会完成这个程序需要完成的业务操作。如果用户线程全部结束了,意味着程序需要完成的业务操作已经结束了,系统可以退出了。所以当系统只剩下守护进程的时候,java虚拟机会自动退出

线程的daemon属性为true表示是守护线程,false表示是用户线程。

package com.example.demo.demo.threadGroupDemo;

/**
 * daemon属性为true表示是守护线程
 */
public class DaemonDemo {
    public static class MyThtead extends  Thread{
        public MyThtead(String name) {
            super(name);
        }

        @Override
        public void run() {
            System.out.println(this.getName() +"开始执行"+(this.isDaemon() ? "我是守护线程" : "我是用户线程"));
        }
    }

    public static void main(String[] args) {
        MyThtead myThtead = new MyThtead("myThtead1");
//        myThtead.setDaemon(true);//
        myThtead.start();
        System.out.println("线程结束!");
    }
}

线程结束!
myThtead1开始执行我是用户线程

当前程序运行没有结束
在这里插入图片描述
主线程main运行完毕后,myThtead线程开始运行,当用户线程运行完毕后(案例中因为while循环方法永远不能结束),系统才会退出

设置守护线程,需要在start()方法之前进行
通过设置daemon的值,设置线程为守护线程再看看,运行结果

package com.example.demo.demo.threadGroupDemo;

/**
 * daemon属性为true表示是守护线程
 */
public class DaemonDemo {
    public static class MyThtead extends  Thread{
        public MyThtead(String name) {
            super(name);
        }

        @Override
        public void run() {
            System.out.println(this.getName() +"开始执行"+(this.isDaemon() ? "我是守护线程" : "我是用户线程"));
            //循环不退出方法
            while (true)
                ;
        }
    }

    public static void main(String[] args) {
        MyThtead myThtead = new MyThtead("myThtead1");
//        myThtead.setDaemon(true);//设置myThtead为守护线程
        myThtead.start();
        System.out.println("线程结束!");
    }
}


运行结果
在这里插入图片描述
程序结束了
区别是设置了myThtead1线程为守护线程
结论:当程序中所有的用户线程执行完毕之后,不管守护线程是否结束,java虚拟机都会自动退出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值