博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
白话JAVA守护线程
阅读量:4359 次
发布时间:2019-06-07

本文共 2557 字,大约阅读时间需要 8 分钟。

(苦逼Coder)原创,转载请务必注明出处:  

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

 
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.  
  18.     private static class MyRunner implements Runnable { 
  19.          
  20.         private long sleepPeriod; 
  21.         private String threadName; 
  22.          
  23.         public MyRunner(long sleepPeriod, String threadName) { 
  24.             this.sleepPeriod = sleepPeriod; 
  25.             this.threadName = threadName; 
  26.         } 
  27.         @Override 
  28.         public void run() { 
  29.             try { 
  30.                 Thread.sleep(sleepPeriod); 
  31.             } catch (InterruptedException e) { 
  32.                 e.printStackTrace(); 
  33.             } 
  34.             System.out.println(threadName + " has finished."); 
  35.         } 
  36.     } 

 

 

开始都活着。

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"); 

 

开始快乐的生活着,妹子能活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"); 

 

 

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

转载于:https://www.cnblogs.com/qiumingcheng/p/4783083.html

你可能感兴趣的文章
廖雪峰Java1-2程序基础-1基本结构
查看>>
golang下的grpc
查看>>
1. 自动化运维系列之Cobbler自动装机
查看>>
ASP.NET MVC Model绑定(二)
查看>>
一步一步写算法(之hash表)
查看>>
漫谈并发编程(一) - 并发简单介绍
查看>>
JDBC连接MySQL数据库及演示样例
查看>>
Beta 冲刺(1/7)
查看>>
修改 Vultr 登录密码
查看>>
CSS学习
查看>>
Centos 安装lnmp完整版
查看>>
【转】Eclipse和PyDev搭建完美Python开发环境(Ubuntu篇)
查看>>
redis安装和配置
查看>>
2016424王启元 Exp5 msf基础应用
查看>>
Differences between page and segment
查看>>
Jdk与Tomcat配置与安装
查看>>
关于一个Java web与JFrame的深度结合
查看>>
VB连数据库conn.open的参数
查看>>
《信息安全系统设计基础》实验三
查看>>
SpringBoot Docs
查看>>