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守护线程

    最近的项目使用的是dubbo.Web工程发布在Tomcat上,会作为消费者调用其他的dubbo微服务.但是最近发现一个问题,在使用shutdown命令关闭tomcat的时候,Tomcat并没有真正关闭 ...

  2. 转:JAVA守护线程

    原文地址:https://www.cnblogs.com/wxgblogs/p/5417503.html 详细内容看原文~  ,写的挺好的 在Java中有两类线程:User Thread(用户线程). ...

  3. Java 守护线程概述

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

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

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

  5. java守护线程。

    java的守护线程:具体定义我也不太清楚,百度和谷歌了看的也不是很明白,但是啊,下边有给出一个例子自己领悟吧. 一.计时器的Timer声明时是否声明为守护线程对计时器的影响. /** * */ pac ...

  6. java 守护线程整理

    java中finally语句不走的可能存在system.exit(0)与守护线程 线程sleep采用TimeUnit类 设定线程的名字thread.getcurrentThread().setName ...

  7. Java 守护线程(Daemon) 例子

    当我们在Java中创建一个线程,缺省状态下它是一个User线程,如果该线程运行,JVM不会终结该程序.当一个线被标记为守护线程,JVM不会等待其结束,只要所有用户(User)线程都结束,JVM将终结程 ...

  8. 从 JVM 视角看看 Java 守护线程

    Java 多线程系列第 7 篇. 这篇我们来讲讲线程的另一个特性:守护线程 or 用户线程? 我们先来看看 Thread.setDaemon() 方法的注释,如下所示. Marks this thre ...

  9. java守护线程的理解

    package daemonThread; /*setDaemon(true)方法将线程设置为守护线程,线程的Daemon默认值为false * 只要当前JVM实例中存在任何一个非守护线程没有结束,守 ...

随机推荐

  1. Selenium模块化

    概述 高内聚低耦合是软件设计的一个基本原则. 内聚:从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事.它描述的是模块内的功能联系. 耦合:各模块之间相互连接的一种度量,耦合强弱取决于模块 ...

  2. C++类构造函数

    一.概述 类是一种用户自定义的类型,声明一个类对象时,编译程序要为对象分配存储空间,进行必要的初始化.在C++中,这项工作是由构造函数来完成的. 大部分对象在使用之前没有正确的初始化是C++出错的主要 ...

  3. 频繁模式挖掘apriori算法介绍及Java实现

    频繁模式是频繁地出如今数据集中的模式(如项集.子序列或者子结构).比如.频繁地同一时候出如今交易数据集中的商品(如牛奶和面包)的集合是频繁项集. 一些基本概念 支持度:support(A=>B) ...

  4. 使用JUnit单元测试入门

    一.JUnit是什么? JUnit是一个开发源代码的java测试框架,用于编写和运行可重复的测试.它是用于单元测试框架体系xUnit的一个实例(用于java语言).JUnit最初是由Erich Gam ...

  5. Unity 之圆环算法

    首先我们要明白圆环生成的原理,其实说白了并不是圆环,而是圆.因为我们使用的预制物体时Cube(物体本身是有大小的)难免会有发生实物的折叠看起来给人的感觉是圆环而已. 1.1 几何中我们要画一个圆,因为 ...

  6. 目标管理剖析与实践– 献给追梦的人 (转)

      好久没写日志了. 最近总算在忙碌的日子中小小的松了一口气, 过来补起这几个月的空缺. 上次写的Cover Letter & Resume 重点诠释 - 深度剖析没想到居然超过了一万的阅读量 ...

  7. VS2003.NET在文件中查找卡死

    不知怎么的,安装vs2003后,一点查找就卡死. 修复方法:修改devenv.exe的兼容性配置,勾选“禁用视觉主题”! 说实话,还真不知道这两者有什么关系?

  8. Marineking wilyin

    A - Marineking wilyin Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Ot ...

  9. 2015.4.16-SQL-内连接与外连接

    1.内连接 如图: 关键字 inner join 2.外连接 分为左外连接 和右外连接,即如果是左外连接,即使左面没有值,也会显示为null, 右外连接也如此 关键字 left join ; righ ...

  10. Fragment之一:Fragment入门

    参考自张泽华视频 Fragment是自Android3.0后引入的特性,主要用于在不同的屏幕尺寸中展现不同的内容. Fragment必须被嵌入Activity中使用,总是作为Activity的组成部分 ...