白话JAVA守护线程

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. }

我只能说,没有妹子,没有活着的理由,直接就都挂了。

现在,你懂守护线程了吗?

时间: 2024-07-28 22:07:02

白话JAVA守护线程的相关文章

java 守护线程整理

java中finally语句不走的可能存在system.exit(0)与守护线程 线程sleep采用TimeUnit类 设定线程的名字thread.getcurrentThread().setName() 设定守护线程thread.getcurrentThread().setDaemon(true) http://www.cnblogs.com/diyingyun/archive/2011/12/04/2275268.html 守护线程在没有用户线程可服务时自动离开,在 Java中比较特殊的线程

Java 守护线程(Daemon) 例子

Java  守护线程(Daemon) 示例 本文由 TonySpark 翻译自 Javarevisited.转载请参见文章末尾的要求. 当我们在Java中创建一个线程,缺省状态下它是一个User线程,如果该线程运行,JVM不会终结该程序.当一个线被标记为守护线程,JVM不会等待其结束,只要所有用户(User)线程都结束,JVM将终结程序及相关联的守护线程. Java中可以用 Thread.setDaemon(true) 来创建一个守护线程.咱们看一个Java中有关守护线程的例子. 1 publi

JAVA守护线程与用户线程的区别

public class DaemonTest { public static void main(String[] args) { new WorkerThread().start(); try { Thread.sleep(7500); } catch (InterruptedException e) {} System.out.println("Main Thread ending") ; } } class WorkerThread extends Thread { publi

Java守护线程概述

Java的线程分为两种:User Thread(用户线程).DaemonThread(守护线程). 只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作:只有当最后一个非守护线程结束是,守护线程随着JVM一同结束工作,Daemon作用是为其他线程提供便利服务,守护线程最典型的应用就是GC(垃圾回收器),他就是一个很称职的守护者. User和Daemon两者几乎没有区别,唯一的不同之处就在于虚拟机的离开:如果 User Thread已经全部退出运行了,只剩下Daemon Thre

JAVA - 守护线程(Daemon Thread)

转载自:http://www.cnblogs.com/luochengor/archive/2011/08/11/2134818.html 在Java中有两类线程:用户线程 (User Thread).守护线程 (Daemon Thread). 所谓守护 线程,是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分.因此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程.反过来说,只要任何非守护线

转:JAVA守护线程

原文地址:https://www.cnblogs.com/wxgblogs/p/5417503.html 详细内容看原文~  ,写的挺好的 在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) .用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆:只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作:只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作.Daemon的作用是为其他线程的运行提供便利服

从 JVM 视角看看 Java 守护线程

Java 多线程系列第 7 篇. 这篇我们来讲讲线程的另一个特性:守护线程 or 用户线程? 我们先来看看 Thread.setDaemon() 方法的注释,如下所示. Marks this thread as either a daemon thread or a user thread. The Java Virtual Machine exits when the only threads running are all daemon threads. This method must b

java守护线程

/** * 后台线程又叫做守护线程,通常是为了辅助其他线程而运行的线程,‘ * 后台线程不妨碍程序终止, * 一个程序中只要还有一个前台线程在执行,这个后台线程就不会终止. * 反之,如果所有前台线程都已经结束,无论是否还有后台线程在执行,这个进程都会结束. * 如果对某个线程对象在启动(调用start()方法)前调用setDeamon(true)方法,这个线程就会变成后台线程. * 创建一个无限循环后台线程,验证前台线程结束后,它也结束 */ package com.starain.threa

java守护线程的理解

package daemonThread; /*setDaemon(true)方法将线程设置为守护线程,线程的Daemon默认值为false * 只要当前JVM实例中存在任何一个非守护线程没有结束,守护线程就在工作 * 当进程中不存在非守护线程,则守护线程随着JVM一同结束 * GC(垃圾回收器)就是一个守护线程 * 本例中main线程虽然先结束,但是testThread线程还在工作,所以只有当testThread线程也结束,才停止打印i */ class MyThread extends Th