守护线程 Daemon

  • 线程分为用户线程守护线程
  • 虚拟机必须确保用户线程执行完毕
  • 虚拟机不用等待守护线程执行完毕
  • 如,后台记录操作日志,监控内存,垃圾回收等待..

代码示例:

/**
* @Description 测试守护线程,上帝保佑着你
* @Author hzx
* @Date 2022-03-27
*/
public class TestDaemon {
public static void main(String[] args) {
TestGod god = new TestGod();
TestYou you = new TestYou(); Thread thread = new Thread(god);
thread.setDaemon(true); //默认是false,表示是用户线程,正常的线程都是用户线程...
thread.start(); //守护线程启动 new Thread(you).start(); //你,用户线程启动
}
} class TestGod implements Runnable {
@Override
public void run() {
while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("上帝保佑着你");
}
}
} class TestYou implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("你开心的活了"+i+"个纪元");
}
System.out.println("===========Goodbye!World!===========");
}
}

执行结果:

上帝保佑着你
你开心的活了0个纪元
上帝保佑着你
你开心的活了1个纪元
上帝保佑着你
你开心的活了2个纪元
上帝保佑着你
你开心的活了3个纪元
上帝保佑着你
你开心的活了4个纪元
你开心的活了5个纪元
上帝保佑着你
你开心的活了6个纪元
上帝保佑着你
上帝保佑着你
你开心的活了7个纪元
上帝保佑着你
你开心的活了8个纪元
你开心的活了9个纪元
===========Goodbye!World!===========
上帝保佑着你
  • 一个守护线程什么时候结束不取决于主线程什么时候结束。守护线程的作用是在后台运行任务,只要还有一个以上非守护线程没有结束(即便此时主线程已结束),程序就不会结束。
  • 反过来,当所有非守护线程都结束了后,即便还有未结束的守护线程,系统也会马上结束这些守护线程,然后结束程序。

思考问题:当非守护线程执行结束的时候,为什么守护线程还会再接着执行一会儿再结束?

解释:单一线程当然是主程序语句结束,主程序结束,多线程是并行状态,主线程语句执行结束,其他线程执行时间可能大于主线程执行时间,所以主线程并没有关闭,等其他线程结束的收尾工作,结束线程也需要时间

最新文章

  1. 细说Linq之Aggregate
  2. CentOS7 bonding配置
  3. coreseek安装遇到的错误
  4. 江西理工大学南昌校区acm选拔赛题解
  5. 单例设计模式getInstance()
  6. OpenCV cv::Mat类
  7. sql中的小细节
  8. Spring Boot 基础
  9. 做了一个web版的 MyBatis Generator
  10. 慕课网-前端JavaScrpt基础面试技巧-学习笔记
  11. Java多线程,判断其他线程是否结束的方法
  12. Linux设备驱动故障定位指引与实例
  13. LOW版统计词频
  14. 如何快速连接无线Wifi 使用二维码
  15. linux命令之df
  16. 20165230田坤烨《网络对抗》Exp1 PC平台逆向破解
  17. 【转】详解在visual studio中使用git版本系统(图文)
  18. css3-自定义字体
  19. sqlserver 对多条数据分组
  20. 服务器端控件同html控件的区别

热门文章

  1. WzwJDBC 自定义工具类(获取连接,释放资源)
  2. 原生ES6写的Web游戏:ES6-Mario,小美女,小帅哥快来玩啊~~
  3. idea 提示错误: 找不到或无法加载主类
  4. SimpleDateForma求日期,2008-11月第6周星期日是几号?
  5. vue点击按钮复制文本框内容
  6. 中小学数学卷子自动生成程序--对G同学的代码分析
  7. C# 将PDF转为Excel
  8. linux权限与系统信息
  9. java实现ssh连接工具类
  10. mybatis在if标签里判断字符串相等