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. 从一段代码看fork()函数及其引发的竞争

    首先来看一段从<UNIX环境高级编程>中摘录的一段很有意思的代码.借此我们再来谈谈fork()函数的一些问题. #include "apue.h" static voi ...

  2. 王立平-Android中对图像进行Base64编码

    // ------------------base64-------------------// public String bitmaptoString(Bitmap bitmap) { // 将B ...

  3. mysq优化

    MySQL调优可以从几个方面来做:1. 架构层:做从库,实现读写分离: 2.系统层次:增加内存:给磁盘做raid0或者raid5以增加磁盘的读写速度:可以重新挂载磁盘,并加上noatime参数,这样可 ...

  4. Linux下 输入 env 而得到的环境变量解读

    HOSTNAME=Master.Hadoop MAHOUT_HOME=/usr/hadoop/mahout-distribution-0.8 TERM=linux SHELL=/bin/bash HA ...

  5. JS中表格的全选和删除要注意的问题

    在项目开发中,由于刚刚开始做项目,我对js还不是很精通,所以在用js对表格的全选和删除中遇到了不少问题,后来通过查找资料解决了,之后总结了一下关于js表格的全选和删除出现的一些问题,希望能帮助到大家. ...

  6. MVC调试异常--未能将脚本调试器附加到计算机

    32位机: 解决办法:以管理员身份打开CMD,运行:regsvr32.exe "%ProgramFiles(x86)%\Common Files\Microsoft Shared\VS7De ...

  7. QT-利用C++仿制windown自带的记事本程序V1.0

    下班无事, 发现QT还是很好用的, 就仿制windows的记事本做了一个,未彻底DEBUG, 先拿来分享下. windows记事本大概是这样的: 大概分为以下几步: 1. 界面用QT代码写,即可, Q ...

  8. C++程序设计实践指导1.5求两个整数集合并集改写要求实现

    改写要求1:改写为单链表结构可以对任意长度整数集合求并集 #include <cstdlib> #include <iostream> using namespace std; ...

  9. 不同css样式适应不同屏幕大小实现自适应宽度

    @media screen and (判断属性){ CSS样式选择器 } 例如: <div class="silder_photo"></div> < ...

  10. S​Q​L​ ​S​e​r​v​e​r​中​​的​P​W​D​E​N​C​R​Y​P​T​与​P​W​D​C​O​M​P​A​R​E​函​数

    前幾天有個客戶的網站出問題(不是我們開發的),請我們幫他看,主要的問題是他們的網站會員在進行查詢密碼時,會員收到信的時候在密碼的欄位竟然會出現 System.Binary[] 字樣.而我進去資料庫中查 ...