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. Spring的MethodInvokingFactoryBean

    通过MethodInvokingFactoryBean 可以向某静态方法注入参数. 如: <bean class="org.springframework.beans.factory. ...

  2. ACdream OJ 1153 (k-GCD)

    题目链接: http://115.28.76.232/problem?pid=1153 题意: 从给定的n个数中取出k个数,使得他们的最大公约数最大,求这个最大的公约数 分析: 暴力分解不可取,我们能 ...

  3. 用Unity做的一个小游戏,仿照一个样例写的,个人认为文章写的不错,哈哈

  4. iOS UIScrollView的简单使用

    本文代码下载 http://vdisk.weibo.com/s/BDn59yfnBVMAJ // // ViewController.m // ScrollView_T1119 // // Creat ...

  5. asp.net + Jquery 实现类似Gridview功能 (一)

    不知不觉2015年就过去一半了,由于过年前后公司人员陆续离职(这个...),项目忙不过来,从过年来上班就一直在忙,最近项目终于告一段落,开始步入正轨(不用天天赶项目了).所以最近才有时间写这个东西,可 ...

  6. AutoFac初探

    .net 4.0使用的DLL #region RegisterType注册 var builder = new ContainerBuilder(); builder.RegisterType< ...

  7. 使用FMDB,libqrencode实现二维码的生成并且保存到数据库

    /**  * 1.首先导入第三方库FMDB和libqrencode,添加库libsqlite3.tbd     

  8. 【IOS学习基础】归档和解档

    一.归档介绍 1.归档是指用某种格式来保存一个或多个对象,以便以后还原这些对象的过程.归档是将数据持久化的一种方式(所谓数据持久化,就是指在IOS开发过程中,将数据保存到本地,能够让程序的运行更加流畅 ...

  9. WEB标准:标准定义、好处、名词解释、常用术语、命名习惯、浏览器兼容、代码书写规范

    1. WEB标准是什么? “WEB标准”是一系列标准的总称.一般的误区经常把WEB标准说成DIV+CSS.准确的说法应该是:采用W3C推荐的WEB标准中的XHTML1.1结合CSS2.0 样式表制作页 ...

  10. html基础之 input:type

    Input表示Form表单中的一种输入对象,其又随Type类型的不同而分文本输入框,密码输入框,单选/复选框,提交/重置按钮等,下面一一介绍.1,type=text输入类型是text,这是我们见的最多 ...