zoukankan      html  css  js  c++  java
  • 守护线程和用户线程

     1 package com.cn.test.thread;
     2 
     3 /**
     4  * 守护线程:任何一个守护线程都是整个JVM中所有非守护线程的保姆:只要当前JVM实例中尚存在任何一个非守护线程没有结束,
     5  *           守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。 GC线程
     6  * @author Administrator
     7  *用户线程:用户自定义的线程
     8  *JVM会在所有的非守护线程(用户线程)执行完毕后退出;
     9   main线程是用户线程;
    10    仅有main线程一个用户线程执行完毕,不能决定JVM是否退出,也即是说main线程并不一定是最后一个退出的线程。
    11  */
    12 public class TestDaemon  {
    13 
    14     public static void main(String[] args) {
    15         
    16         //fase  main线程不是守护线程
    17         System.out.println(Thread.currentThread().isDaemon());
    18         for (int i=0; i <3; i++) {
    19             System.out.println("非守护线程正在执行" + i);
    20         }
    21         TestThread1 t1 = new TestThread1();
    22         t1.setDaemon(true);
    23         t1.start();
    24     }
    25     
    26 }
    27 
    28 class TestThread1 extends Thread {
    29     @Override
    30     public void run() {
    31         for (int i=0; i<10;i++) {
    32             try {
    33                 Thread.sleep(10);
    34             } catch (InterruptedException e) {
    35                 // TODO Auto-generated catch block
    36                 e.printStackTrace();
    37             }
    38             System.out.println("守护线程正在执行" + i);
    39         }
    40     }
    41 }

    运行结果:

    false
    非守护线程正在执行0
    非守护线程正在执行1
    非守护线程正在执行2

    结论:非守护线程结束之后jvm退出,守护线程没有要守护的线程,也进行退出

    守护线程和用户线程唯一的区别在于:

    补充说明:
    定义:守护线程--也称“服务线程”,在没有用户线程可服务时会自动离开。
    优先级:守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务。
    设置:通过setDaemon(true)来设置线程为“守护线程”;将一个用户线程设置为
    守护线程的方式是在 线程对象创建 之前 用线程对象的setDaemon方法。
    example: 垃圾回收线程就是一个经典的守护线程,当我们的程序中不再有任何运行的
    Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是
    JVM上仅剩的线程时,垃圾回收线程会自动离开。它始终在低级别的状态中运行,用于
    实时监控和管理系统中的可回收资源。
    生命周期:守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且
    周期性地执行某种任务或等待处理某些发生的事件。也就是
    说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”。那Java的守护线程是
    什么样子的呢。当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个
    或以上的非守护线程则JVM不会退出。
  • 相关阅读:
    显示图案
    圆的面积和周长
    Python基础--list列表删除元素
    Python基础--列表添加元素
    Python基础--列表创建访问删除
    Python基础--序列简介
    一个网页通用的测试用例(转载)
    测试计划与测试方案的区别
    判断一棵树是否是二叉平衡树
    判断丑数与寻找丑数
  • 原文地址:https://www.cnblogs.com/startSeven/p/10211828.html
Copyright © 2011-2022 走看看