`

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喜欢什么退出就退出吧,不用管它。

分享到:
评论

相关推荐

    linux c++ 守护线程,判断程序是否运行,不存在就启动

    std::thread daemonThread(monitorTargetProgram); // 确保主程序不立即结束 while (true) { std::this_thread::sleep_for(std::chrono::hours(24)); } return 0; } ``` 请注意,实际应用中可能需要处理更...

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

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

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

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

    线程守护程序

    在Java中,一个线程被标记为守护线程(Daemon Thread)后,它不会阻止Java虚拟机(JVM)的退出。正常情况下,JVM会在所有非守护线程结束后退出。但如果存在守护线程,即使没有其他非守护线程,JVM也会继续运行,直到...

    浅谈java的守护线程与非守护线程

    在Java中,有两类线程:UserThread(用户线程)和Daemon Thread(守护线程)。守护线程的作用是为其他线程的运行提供服务,比如说GC线程。它们的本质上来说没有区别,唯一的区别之处就在虚拟机的离开:如果User ...

    守护线程系统-含源码

    在Java编程中,守护线程(Daemon Thread)是一种特殊的线程类型,它的主要作用是为应用程序提供后台服务,而不会阻止程序的退出。当所有的非守护线程(用户线程)结束时,JVM会自动关闭守护线程并退出。在本项目...

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

    Java 中有两类线程:User Thread(用户线程)和 Daemon Thread(守护线程)。用户线程即运行在前台的线程,而守护线程是运行在后台的线程。守护线程的作用是为其他前台线程的运行提供便利服务,而且仅在普通、非守护...

    详解Java线程-守护线程与用户线程

    Java中的线程可以分为守护线程(DaemonThread)和用户线程(UserThread)两类。守护线程和用户线程的唯一区别是它们对虚拟机的退出(程序的终止)的影响。 当JVM中只有守护线程时,虚拟机会退出,程序终止;而当JVM中至少...

    什么是java的守护线程.pdf

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

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

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

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

    浅谈java中守护线程与用户线程 本篇文章主要介绍了java中守护线程与用户线程的概念和区别。Java中的线程可以分为两类,即daemon线程(守护线程)和User线程(用户线程)。守护线程是一种特殊的线程,它们的生命周期...

    Java多线程守护线程

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

    谈谈Java中的守护线程与普通线程

    在这个例子中,`daemonThread`是守护线程,`main`线程是非守护线程。如果`main`线程结束而`daemonThread`仍在运行,JVM仍会继续运行直到`daemonThread`完成。反之,如果`daemonThread`还在运行,但所有非守护线程...

    JVM中的守护线程示例详解

    同时,创建了一个守护线程"DaemonThread",并将其设置为守护线程,然后输出所有线程的信息,最后主线程等待5秒后退出。 通过这样的实验,我们可以观察到: - 用户线程"NormalThread"会阻止JVM的立即退出,即使守护...

    python实现守护进程、守护线程、守护非守护并行

    Python中的守护进程(daemon process)、守护线程(daemon thread)以及如何实现守护和非守护的并行处理是多任务编程中的重要概念。在Python中,这些功能主要通过`multiprocessing`和`threading`模块来实现。 守护...

    守护线程确保pushService

    在Android中,我们可以通过设置Thread的daemon属性将其转换为守护线程。 2. **保活策略**: - **双进程保活**:创建一个辅助进程,将关键服务运行在这个进程中。这样即使主进程被系统回收,辅助进程仍然可以存活,...

    守护进程(java)

    在这段代码中,`daemonThread`被设置为守护线程,当其他非守护线程结束时,JVM会继续运行该线程直到其完成任务。 守护线程通常用于执行一些后台任务,如资源清理、日志记录、定时任务等。由于它们在所有非守护线程...

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

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

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

    守护线程与普通线程的主要区别在于,当JVM中没有非守护线程(用户线程)在运行时,JVM会自动退出,即使仍有守护线程在工作。这使得守护线程常用于提供系统级的服务,例如垃圾回收(Garbage Collection)、内存管理等...

    Python守护线程用法实例

    在Python编程中,线程是并发执行任务的基本单位,而守护线程(Daemon Thread)是一种特殊类型的线程,它的主要特点是当所有非守护线程结束时,即使守护线程还在运行,Python解释器也会强制退出。了解并正确使用守护...

Global site tag (gtag.js) - Google Analytics