zoukankan      html  css  js  c++  java
  • 白话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.  
    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"); 

    我只能说,没有妹子,没有活着的理由,直接就都挂了。
     
    现在,你懂守护线程了吗?
  • 相关阅读:
    linux command lynx
    git bisect
    git blame (10)
    git crate&query&delete tag(九)
    git crate patch and check&apply patch(八)
    learning shell check host dependent pkg (8)
    【泛型】
    sql server 查询所有表的记录数
    【转】EXCEL中如何实现由总表自动得出分表
    MS Chart 打印
  • 原文地址:https://www.cnblogs.com/qiumingcheng/p/4783083.html
Copyright © 2011-2022 走看看