`
hz_chenwenbiao
  • 浏览: 1008052 次
  • 性别: 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多线程Demo

    5. 守护线程(Daemon Thread): 守护线程是用于支持应用程序运行的后台线程,比如垃圾回收器就是守护线程。当所有非守护线程结束时,即使还有守护线程在运行,JVM也会退出。我们可以使用`setDaemon(true)`方法将...

    java多线程的讲解和实战

    5. **守护线程(Daemon)**:守护线程是一种不会阻止程序退出的特殊线程,例如JVM的垃圾收集器就是守护线程。通过`setDaemon(true)`方法将线程设置为守护线程。 6. **线程池**:Java提供`ExecutorService`和`...

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

    在Java中,线程分为两种类型:用户线程(User Thread)和守护线程(Daemon Thread)。这两种线程在大部分行为上是相同的,但它们在决定虚拟机何时退出时有显著差异。 用户线程是程序的主要部分,Java虚拟机(JVM)...

    java 变形金刚中的守护神(守护线程)

    在Java编程语言中,守护线程(Daemon Thread)被称为“变形金刚中的守护神”,这是因为它们在后台默默地工作,为应用程序提供必要的服务,而不会阻止程序的退出。理解并正确使用守护线程是Java多线程编程中的一个...

    Java多线程机制(讲述java里面与多线程有关的函数)

    守护线程(Daemon)是一种不阻止程序退出的线程,如垃圾收集器就是守护线程。当所有非守护线程结束时,程序会终止,即使还有守护线程在运行。 掌握Java的多线程机制对于编写高效、并发友好的应用程序至关重要,它...

    浅谈java中守护线程与用户线程

    Java中的线程可以分为两类,即daemon线程(守护线程)和User线程(用户线程)。守护线程是一种特殊的线程,它们的生命周期并不受主线程的影响,而用户线程则是我们可以看到的线程。 在JVM启动时,main函数所在的...

    java 多线程示例

    8. **守护线程(Daemon Thread)** 守护线程不会阻止程序的退出,如JVM的垃圾收集器就是守护线程。可以通过`setDaemon(true)`将线程设置为守护线程。 9. **线程池** Java的`ExecutorService`和`...

    【java 多线程】守护线程与非守护线程的详解

    Java守护线程与非守护线程详解 Java 中有两类线程:User Thread(用户线程)和 Daemon Thread(守护线程)。用户线程即运行在前台的线程,而守护线程是运行在后台的线程。守护线程的作用是为其他前台线程的运行提供...

    Java多线程详解及示例

    守护线程(Daemon Thread)是一种特殊线程,当所有非守护线程结束时,守护线程也会随之结束,通常用于后台服务。 总结: Java多线程编程是提升程序性能和响应性的关键技术。理解多线程的概念,掌握线程的创建、同步...

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

    Java守护线程实例详解 Java中的线程可以分为两类:User Thread(用户线程)和Daemon Thread(守护线程)。在Java中,Daemon Thread是一种特殊的线程,它的主要作用是为其他线程的运行提供便利服务。守护线程的特点...

    Java多线程的线程守护两个例子_.docx

    以下是一个简单的Java守护线程示例: ```java public class Test { public static void main(String[] args) { Thread t1 = new MyCommon(); // 非守护线程 Thread t2 = new Thread(new MyDaemon()); // 守护...

    什么是java的守护线程.pdf

    Java中的守护线程(Daemon Thread)是Java虚拟机(JVM)的一种特殊线程类型,它们在后台执行任务,主要用于为应用程序的其他非守护线程提供服务。守护线程的一个典型例子是垃圾回收器(Garbage Collector),它默默...

    Java多线程练习题

    2.守护线程(Daemon Thread):后台运行的线程,当所有非守护线程结束时,守护线程也会自动结束。 六、线程池 Java提供ExecutorService和ThreadPoolExecutor来管理线程,可以避免频繁创建和销毁线程带来的开销,...

    Java多线程编程线程的协同、停止、暂停、继续等操作实现

    6. **守护线程(Daemon Threads)** 守护线程是一种特殊类型的线程,它不会阻止程序的退出。Java中的`Thread.setDaemon(true)`方法可将线程设置为守护线程。通常,后台服务或日志记录线程可以设置为守护线程。 7. ...

    精通java多线程

    守护线程(Daemon Thread)是一种特殊的线程,当所有非守护线程结束时,程序会自动结束,即使还有守护线程在运行。Java的Thread类的setDaemon()方法可以将线程设置为守护线程。 八、线程池 Java的ExecutorService和...

    java多线程示例

    七、守护线程(Daemon) 守护线程在所有非守护线程结束时自动终止,通常用于后台服务,如垃圾收集器。 通过以上知识点,我们可以更好地理解和运用Java多线程,实现高效、稳定的并发程序。文档“java多线程实例.docx...

    Java多线程笔记

    Java多线程笔记是 Java 编程语言中关于多线程编程的笔记,涵盖了线程基础知识、线程优先级、线程状态、守护线程、构造线程、线程中断等多方面的内容。 获取简单 main 程序中的线程 在 Java 中,可以使用 ...

Global site tag (gtag.js) - Google Analytics