`

Daemonthread(守护线程)的含义

阅读更多

http://fruitking.iteye.com/blog/419951

 

先来一个不是守护线程的例子:
public class Thread1 implements Runnable {

public void run() {
for (;;) {
try{
Thread.sleep(500);
}catch(Exception e){
e.printStackTrace();
}
System.out.println("Thread   1   run");
}
}

public static void main(String[] args) {
System.out.println("Thread   main   started!");
try {
(new Thread(new Thread1())).start();
} catch (Exception e) {
}
System.out.println("Thread   main   ended!");
}

}
这样主线程结束了,但是启动线程Thread1这个实例还没有结束,将一直运行下去
来看一个守护线程的例子:
public class ThreadDaemon implements Runnable {

public void run() {
for (;;) {
System.out.println("Thread   1   run");
}
}

public static void main(String[] args) {
System.out.println("Thread   main   started!");
try {
Thread a = new Thread(new ThreadDaemon());
a.setDaemon(true);
a.start();
} catch (Exception e) {
}
System.out.println("Thread   main   ended!");
}

}
运行结果如下:
Thread   main   started!
Thread   main   ended!
Thread   1   run
Thread   1   run
Thread   1   run
Thread   1   run
Thread   1   run
后面就停止没有了输出了
说明那个子线程ThreadDaemon也结束了
这就是守护线程的含义:只要主线程退出了,不管守护线程死活都强制退出

 

应用场景:

管理作用,后台管理者
比如:
进行内存回收,垃圾清理等工作




无论是什么线程,都一定会分时间片执行的,和上面的检测拼写及输入并没有任何关系

 

比如你正在   用   Java   写成的编辑器   写   Word   文档,

你一边敲键盘,这是个   非守护线程,   后台还有一个   拼写检查   线程,它是个守护线程,他尽量不打扰你写稿子,   你们可以同时进行,他发现有拼写错误时在状态条显示错误,但是你可以忽略。

就像   城堡门前有个卫兵   (守护线程),里面有诸侯(非守护线程),他们是可以同时干着各自的活儿,但是   城堡里面的人都搬走了,   那么卫兵也就没有存在的意义了。

 

守护线程与普通线程的唯一区别是:当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则不会退出。(以上是针对正常退出,调用System.exit则必定会退出)


所以setDeamon(true)的唯一意义就是告诉JVM不需要等待它退出,让JVM喜欢什么退出就退出吧,不用管它。

分享到:
评论

相关推荐

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

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

    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....

    Python守护线程用法实例

    本文实例讲述了Python守护线程用法。分享给大家供大家参考,具体如下: 如果你设置一个线程为守护线程,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出。如果你的主线程在退出的时候,...

    python基础9_1-进程、线程、守护线程、全局解释器锁、生产者消费者模型

    目录1、Python GIL(Global Interpreter Lock)2、进程(process)多进程multiprocessing进程间通讯-Queues/Pipes/Managers进程锁进程池3、线程(thread)语法join函数daemon(守护线程)线程锁之Lock(互斥锁mutex)/RLock...

    Python中Threading用法详解

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

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

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

    python多线程使用方法实例详解

    threading 模块支持守护线程, 其工作方式是:守护线程一般是一个等待客户端请求服务的服务器。 如果把一个线程设置为守护线程,进程退出时不需要等待这个线程执行完成。 如果主线程准备退出时,不需要等待某些子...

    【python内功修炼006】:基于threading模块的多线程操作(详解)

    threading模块主要对象三、threading.Thread对象1、语法2、参数3、常用方法四、python开启线程的两种方法1、使用threading.Thread 线程对象2、继承父类threading.Thread五、Threading模块主要函数1、主要函数介绍2、...

    mylty_thread_review

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

    c# 面试必备线程基础知识点

    线程的知识太多,知识点有深有浅,往深的研究会涉及操作系统、CPU、内存,往浅了说就是一些语法。没有一定的知识积累,很难把线程的知识...根据线程运行模式,可以把线程分为前台线程、后台线程和守护(Daemon)线程:

    Python守护进程实现过程详解

    如果你设置一个线程为守护线程,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出。如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程的daemon属性。即在线程开始...

    linux进程监控和进程守护程序

    幸*启动配置文件当中的需要守护的程序 执行成功返回1,中途出错,返回-1 长界零家墨军零家零率家三哮零座零率零零容岸军零罕型率零零零零牢察座察零零零零季球军零容零 int moniter_ run(struct proc_struct"must...

    python-manhole:调试python应用程序的沙井

    它可以作为工作在任何时候都Python守护线程等待连接或一个信号处理器(停止你的应用程序,并等待连接)。 对套接字的访问仅限于应用程序的有效用户ID或root。 这就像扭曲的 。 它更简单(没有依赖项),仅在Unix域...

    ARM_Linux启动分析.pdf

    keventd核心线程,由init线程创建,在核心态运行context_thread()函数 对于I386平台 基本相同。 对于2.4.x版内核 这一部分的启动过程在2.4.x内核中简化了不少,缺省的独立初始化过程只剩下网络 (sock_init()...

Global site tag (gtag.js) - Google Analytics