`
hz_chenwenbiao
  • 浏览: 991922 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java守护线程(daemon)(转)

阅读更多
package chenwenbiao.test;
import java.io.IOException;
/* 
 * 守护线程在没有用户线程可服务时自动离开
 * 在Java中比较特殊的线程是被称为守护(Daemon)线程的低级别线程。
 * 这个线程具有最低的优先级,用于为系统中的其它对象和线程提供服务。
 * 将一个用户线程设置为守护线程的方式是在线程对象创建之前调用线程对象的setDaemon方法。
 * 典型的守护线程例子是JVM中的系统资源自动回收线程,
 * 我们所熟悉的Java垃圾回收线程就是一个典型的守护线程,
 * 当我们的程序中不再有任何运行中的Thread,
 * 程序就不会再产生垃圾,垃圾回收器也就无事可做,
 * 所以当垃圾回收线程是Java虚拟机上仅剩的线程时,Java虚拟机会自动离开。 
 * 它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。
 * 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
 * 也就是说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”。
 * 那Java的守护线程是什么样子的呢。
 * 当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;
 * 如果还有一个或以上的非守护线程则JVM不会退出。 
 */
public class testThread extends Thread {
    
    public testThread() {
    }
    /** *//**
     * 线程的run方法,它将和其他线程同时运行
     */
    public void run(){
        for(int i = 1; i <= 100; i++){
            try{
                Thread.sleep(100);
                
            } catch (InterruptedException ex){
                ex.printStackTrace();
            }
            System.out.println(i);
        }
    }
    public static void main(String [] args){
     testThread test = new testThread();
        test.setDaemon(true);
        test.start();
        /**
         * 在start之后再设置为守护线程的话,就会抛出如下异常:
         * Exception in thread "main" java.lang.IllegalThreadStateException
			at java.lang.Thread.setDaemon(Unknown Source)
			at chenwenbiao.test.testThread.main(testThread.java:42)
			但线程是正常工作的,只是不是守护线程
         */
//        test.setDaemon(true);
        System.out.println("isDaemon = " + test.isDaemon());
        try {
            System.in.read(); // 接受输入,使程序在此停顿,一旦接收到用户输入,main线程结束,守护线程自动结束,如果用户不输入东西,那么程序会一直从1输出到100,之后才算完了,但主进程还没结束;而当我们在运行这个程序时输入一个回车,那全部线程都结束了,包括主线程都退出
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

 

java设置守护线程。只要Thread.setDeamon(true)就可以了。只能在创建的时候设置!运行之后再setDeamon(true)则会报异常IllegalThreadStateException

不过一直没有了解守护线程和非守护线程有什么区别!一直属于烂(非滥)用- -

守护线程一听 就是“单相思”!~ 守护主线程! 主线程一旦退出,守护线程不管现在在做什么都要伴随着主线程的退出而退出。 就像以前皇帝一样,皇帝挂了,其他人都要陪葬!! 所以守护程序的退出,可能不是十分优美。因为守护线程可能执行了一半中途强行挂掉

而非守护线程就不一样了!~主线程依赖于非守护线程。主线程不会主动强制退出,如果非守护线程还在运行中。(当然不包括线程显示的强制退出如:System.exit(0);这种情况属于程序被动退出)

当程序中只存在守护线程时,意味着JVM退出,即程序停止运行了。当且仅当有一个非守护线程,JVM就不会主动退出!

一旦,一个线程设置为守护线程之后, 其该线程创建的子线程也隐式的设置为守护线程

这是本人的一点理解,有疑义或者补充请提出!3Q~

分享到:
评论
2 楼 hz_chenwenbiao 2012-07-25  
守护进程,根据名字也知道它是起守护的作用,就是辅助系统干点事,代码也给出了JVM的垃圾回收线程就是守护线程,守护线程可以根据垃圾回收线程的低优先级运行,在系统退出时,它就结束等特性来理解守护线程。
1 楼 Wen_JN_86 2012-07-19  
我是初学者,不太明白守护进程有什么用,主线程可以不需要守护线程独立的运行,而且主线程退出的话守护线程也会退出,那么守护线程的作用是什么呢?

相关推荐

    java daemon 守护线程实例

    java daemon 程序,有助于理解守护线程的概念和使用

    精灵线程(Daemon)或守护线程---马克-to-win java视频

    精灵线程(Daemon)或守护线程---马克-to-win java视频

    Java 守护线程,看这篇文章就对了! ( Daemon Thread )

    Java 的守护线程什么是Java的守护线程( Daemon Thread )?守护线程的区别?守护线程的作用?守护线程如何创建?守护线程如何判断?守护线程使用的注意事项总结 什么是Java的守护线程( Daemon Thread )? Java 提供...

    Java线程之守护线程(Daemon)用法实例

    主要介绍了Java线程之守护线程(Daemon)用法,较为详细的分析了守护线程的功能与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    Java多线程守护线程

     在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)  作用  Daemon的作用是为其他线程的运行提供便利服务,守护线程典型的应用是 GC (垃圾回收器),它是一个很称职的守护者。  区别  ...

    Java守护线程实例详解_动力节点Java学院整理

    在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 。下面通过本文给大家分享java守护线程实例详解,需要的朋友参考下吧

    JAVA最新面试资料-备战2023金三银四

    java 中的线程分为两种:守护线程(Daemon)和用户线程(User)。任 何线程都可以设置为守护线程和用户线程,通过方法 Thread.setDaemon(boolon);true 则把该线程设置为守护线程,反之则为用户线程。 Thread....

    java程序设计于开发 第七讲 多线程

    多线程基本概念 创建线程的方式 线程的生命周期及控制 线程的优先级及调度 多线程的互斥与同步 守护线程 (Daemon) 线程组 (ThreadGroup)

    java jdk实列宝典 光盘源代码

    守护线程Daemon;线程池;一个死锁的例子; 定时器Timer:包括在指定时间执行任务,在指定时间之后执行任务以及在某个时间之后每隔时间段重复执行的任务; 9 Java GUI 日历:使用swing和awt实现一个图形化的日历可以...

    Python中Threading用法详解

    daemon thread 守护线程,如果守护线程之外的线程都结束了。守护线程也会结束,并强行终止整个程序。不要在守护进程中进行资源相关操作。会导致资源不能正确的释放。在非守护进程中使用Event。 Thread 类 (group=...

    java中JVM的原理

    Java虚拟机的生命周期一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。...Java中的线程分为两种:守护线程(daemon)和普通线程(non-daemon)。守护线程是Java虚拟机自己使用的线程,比如负

    Java JDK实例宝典

    9 守护线程Daemon 8. 10 线程池 8. 11 一个死锁的例子 8. 12 定时器Timer 第9章 Java GUI 9. 1 日历 9. 2 开窗户游戏 9. 3 标准型计算器 9. 4 更改组件的外观 9. 5 自定义...

    实战Java高并发程序设计(第2版)PPT模板.pptx

    1 2.1有关线程你必须知道的事 3 2.3volatile与Java内存模型(JMM) 2 2.2初始线程:线程的基本操作 4 2.4分门别类的管理:线程组 2java并行程序基础 5 2.5驻守后台:守护线程(Daemon) 6 2.6先做重要的事:线程...

    守护进程、脚本、指定外部配置文件

    ①守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。 ②这是我在公司用的...

    mylty_thread_review

    多线程复习,欢迎大家Star 包名和内容对应如下: ...no9_daemon_thread 守护线程实例 no10_threadgroup 线程组 no11_thread_catch_exception 指定异常捕获类捕获线程中的异常 no12_producter_consumer_wait_no

    ProcessKeepingAlive:Android App,进程保活:前台通知;前后台Service;前台一像素的Activity;厂商推送渠道等

    ProcessKeepingAlive 保活策略:前台通知;Daemon守护线程,提高线程优先级;微信的保活方案:双Service强制前台进程保活。提高进程的优先级;前后台Service;前台一像素的Activity;厂商推送渠道等

Global site tag (gtag.js) - Google Analytics