OneCoder(苦逼Coder)原创,转载请务必注明出处: http://www.coderli.com/archives/daemon-thread-plain-words/

关于“白话”:偶然想到的词,也许有一天能成为一个系列。目的就是用简洁,明快的语言来告诉您,我所知道的一切。

Java中的线程分两类,用户线程和守护线程。
  1. Thread commonThread = new Thread("Common Thread");

这样就是用户线程。

  1. Thread daemonThread = new Thread("Daemon Thread");
  2. daemonThread.setDaemon(true);

这样就是守护线程。

起了“守护”线程这么动听的名字,自然要起到“守护”的作用。就好比男人要守护妹子。

守护线程的作用,按照网上的说法是:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。
说白了就是妹子没了,男人也就自尽了。分情况写几个例子,一跑便知。
  • 两个妹子 - 互不想干,你挂你的,我挂我的
  1. /**
  2. * 测试两个用户线程的情况
  3. *
  4. * @author lihzh(OneCoder)
  5. * @date 2012-6-25 下午10:07:16
  6. */
  7. private static void twoCommonThread() {
  8. String girlOneName = "Girl One";
  9. Thread girlOne = new Thread(new MyRunner(3000, girlOneName), girlOneName);
  10. String girlTwoName = "Girl Two";
  11. Thread girlTwo = new Thread(new MyRunner(5000, girlTwoName), girlTwoName);
  12. girlOne.start();
  13. System.out.println(girlOneName + "is starting.");
  14. girlTwo.start();
  15. System.out.println(girlTwoName + "is starting");
  16. }
  17. private static class MyRunner implements Runnable {
  18. private long sleepPeriod;
  19. private String threadName;
  20. public MyRunner(long sleepPeriod, String threadName) {
  21. this.sleepPeriod = sleepPeriod;
  22. this.threadName = threadName;
  23. }
  24. @Override
  25. public void run() {
  26. try {
  27. Thread.sleep(sleepPeriod);
  28. } catch (InterruptedException e) {
  29. e.printStackTrace();
  30. }
  31. System.out.println(threadName + " has finished.");
  32. }
  33. }

开始都活着。

3秒后,妹子1挂了,妹子2活的好好的,她的寿命是5秒。

  • 一妹子一王子
  1. /**
  2. * 测试一个用户一个守护线程
  3. *
  4. * @author lihzh(OneCoder)
  5. * @date 2012-6-25 下午10:22:58
  6. */
  7. private static void oneCommonOneDaemonThread() {
  8. String girlName = "Girl";
  9. Thread girl = new Thread(new MyRunner(3000, girlName), girlName);
  10. String princeName = "Prince";
  11. Thread prince = new Thread(new MyRunner(5000, princeName), princeName);
  12. girl.start();
  13. System.out.println(girlName + "is starting.");
  14. prince.setDaemon(true);
  15. prince.start();
  16. System.out.println(prince + "is starting");
  17. }

开始快乐的生活着,妹子能活3秒,王子本来能活5秒。

但是3秒后,妹子挂了,王子也殉情了。

你可能会问,如果王子活3秒,妹子能活5秒呢。我只能说,虽然你是王子,该挂也得挂,妹子还会找到其他高富帅的,懂?

看,王子已经挂了。

  • 两个王子
  1. /**
  2. * 测试两个守护线程
  3. *
  4. * @author lihzh(OneCoder)
  5. * @date 2012-6-25 下午10:29:18
  6. */
  7. private static void twoDaemonThread() {
  8. String princeOneName = "Prince One";
  9. Thread princeOne = new Thread(new MyRunner(5000, princeOneName), princeOneName);
  10. String princeTwoName = "Prince Two";
  11. Thread princeTwo = new Thread(new MyRunner(3000, princeTwoName), princeTwoName);
  12. princeOne.setDaemon(true);
  13. princeOne.start();
  14. System.out.println(princeOneName + "is starting.");
  15. princeTwo.setDaemon(true);
  16. princeTwo.start();
  17. System.out.println(princeTwoName + "is starting");
  18. }

我只能说,没有妹子,没有活着的理由,直接就都挂了。
现在,你懂守护线程了吗?

白话JAVA守护线程相关推荐

  1. java守护线程的特性

    java守护线程,顾名思义,守护的是主进程,当主线程结束了,守护线程也就结束了 我们看代码 public class ThreadDemo {public static void main(Strin ...

  2. java守护线程和用户线程

    java守护线程和用户线程 1.Java线程分类 Java分两类线程:1.用户线程 2.守护线程 2.区别 1.JVM在用户线程没有结束前,会一直和守护线程一同运行. 2.如果用户线程全部结束,那么J ...

  3. java守护线程与用户线程_详解Java线程-守护线程与用户线程

    干java 开发这么多年, 之前一直没留意java 进程还区分守护进程和用户进程.守护进程这个概念最早还是在linux系统中接触的,直到近期使用java开发心跳检测功能时,使用Timer时才发现原来j ...

  4. JAVA守护线程 非守护线程

    笔记: 第一篇转载写的比较好,将守护线程同linux的守护进程概念进行了对比. 当非守护线程执行完jvm就退出,不管是否还有守护线程在执行.所以守护线程尽量不要执行逻辑代码,顶多执行一些可有可无的辅助 ...

  5. java守护线程与非守护线程

    java守护线程与非守护线程 代码逻辑 当前网上结论 1.主线程结束,守护线程跟着结束 2.只要存在任何一个非守护线程,守护线程就全部工作 测试代码 第一段代码 第二段代码 结论 代码逻辑 代码里面包 ...

  6. Java 守护线程概述

    Java的线程分为两种:User Thread(用户线程).DaemonThread(守护线程). 只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作:只有当最后一个非守护线程结束 ...

  7. Java守护线程概述

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  8. java守护线程和用户线程的区别

    Java中的线程可以分为两类,即用户线程和守护线程.用户线程是为了完成任务,而守护线程主要是为其他线程服务. 守护线程的唯一用途是为其他线程提供服务.守护线程会随时中断,因此不要在守护线程上使用需要释 ...

  9. JAVA - 守护线程(Daemon Thread)

    转载自:http://www.cnblogs.com/luochengor/archive/2011/08/11/2134818.html 在Java中有两类线程:用户线程 (User Thread) ...

最新文章

  1. 一位老工程师前辈的忠告
  2. 教你搭建基于typescript的vue项目
  3. VTK:模型之MarchingCubes
  4. 对上拉下拉电阻的作用作个总结(想了解的过来看看)(转载)
  5. iphone 字符串分隔与组合
  6. java根据周数获取日期_java获取日期的周数和所属年份
  7. JAVA Timer 定时器
  8. java hql 参数_java – SQLQuery中的Hibernate命名参数
  9. Flutter入门(1)—环境配置
  10. python3编程环境,使用 python3 环境开发。
  11. wps如何使用ppt美化大师_WPS的ppt一键美化软件怎么用
  12. aop日志 android,ASM实现Android APK的AOP日志统计
  13. 当时明月在,曾照彩云归。
  14. 十大顶级大数据可视化工具
  15. 让html img图片垂直居中的三种方法
  16. C++一步解决cls闪烁问题
  17. pacs系统数据库服务器,医用PACS系统数据库云计算的设计
  18. XML格式文件转化为实体类Bean
  19. 2019中兴校招流程回顾总结
  20. CGAN(条件生成-对抗网络)简述教程

热门文章

  1. 服务器Linux与Windows固件,Linux与windows服务器系统的区别
  2. 讯飞语音识别_赛诺语音输入法报告 搜狗、讯飞、百度AI语音输入哪家强
  3. ARTS打卡计划第二周-Share-使用java注解对方法计时
  4. SqlServer 索引
  5. 浪潮各机型前面板指示灯含义
  6. Asp.net Mvc 多级控制器 路由重写 及 多级Views目录 的寻找视图的规则 (多级路由) 如:Admin/Test/Index...
  7. Java基础——常用Map的实现细节
  8. php打印四边形,用php的for循环输出四边形,各种三角形和菱形【含空心版本】
  9. mysql自定义收藏分类_MYSQL中SHOW的使用整理收藏
  10. DSP320C6000的指令列表汇集