`
wanxiaotao12
  • 浏览: 473054 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Thread守护线程

 
阅读更多

概念

Java有两种Thread:守护线程、用户线程

用户线程:程序员自己创建的线程,默认为用户线程,  Java虚拟机在所有用户线程执行完后自动结束

守护线程:JVM后台线程, 为用户线程服务的, 程序员可以创建守护线程, JVM也有守护线程, 如:垃圾回收线程(是为用户线程提供服务的), 当用户线程都执行完后, 守护线程也要结束, 随着JVM结束

 

Thread.setDaemon(true)可以将自己定义的线程, 设置为守护线程

 

使用方法:

1. setDaemon需要在start方法调用之前使用

2. 如果jvm中都是守护进程,当前jvm将exit。(随之而来的,所有的一切烟消云散,包括后台线程啦)

3. 主线程结束后,

1) 用户线程将会继续运行

2) 如果没有用户线程,都是守护进程的话,那么jvm结束

 

如果创建的线程没有显示调用此方法,这默认为用户线程。

实例如下:

package com.jack.mySample;

import java.io.IOException;

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();
// 如果不设置daemon,那么线程将输出100后才结束
test.setDaemon(true);
test.start();
System.out.println("isDaemon = " + test.isDaemon());
try {
System.in.read(); // 接受输入,使程序在此停顿,一旦接收到用户输入,main线程结束,守护线程自动结束
} catch (IOException ex) {
ex.printStackTrace();
}
}
}

 

补充说明:

定义:守护线程--也称“服务线程”,在没有用户线程可服务时会自动离开。

 

优先级:守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务。

 

设置:通过setDaemon(true)来设置线程为“守护线程”;将一个用户线程设置为守护线程的方式是在 线程对象创建 之前 用线程对象的setDaemon方法。

 

example: 垃圾回收线程就是一个经典的守护线程,当我们的程序中不再有任何运行的Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是JVM上仅剩的线程时,垃圾回收线程会自动离开。它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。

 

生命周期:守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。也就是说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”。那Java的守护线程是什么样子的呢。当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则JVM不会退出。

分享到:
评论

相关推荐

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

    在Linux系统中,C++编程时常常需要创建守护线程(daemon thread)来执行特定的任务,比如监控系统状态、定时任务或确保某个服务始终运行。守护线程是一种长期运行的后台进程,它不依赖于终端会话,即使用户注销或者...

    ASPNET中实现在线用户检测(使用后台守护线程).rar

    守护线程是一种特殊的线程,它在应用程序启动时创建,并在所有其他非守护线程结束后继续运行,直到应用程序关闭。在ASP.NET环境中,我们可以巧妙地运用守护线程来定期更新在线用户列表。 首先,我们需要创建一个...

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

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

    线程守护程序

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

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

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

    守护线程系统-含源码

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

    守护线程--源码--练手

    守护线程,也被称为后台线程,是Java编程语言中的一种特殊线程类型。它们的主要特点是在所有非守护线程(用户线程)结束后,守护线程才会被系统强制结束。在Windows环境下,通常我们使用服务来实现长期运行的任务,...

    ASPNET中实现在线用户检测(使用后台守护线程)

    根据提供的信息,我们可以详细探讨如何在ASP.NET中实现在线用户检测功能,并且通过使用后台守护线程来确保这一过程能够持续有效地运行。 ### ASP.NET中实现在线用户检测 #### 背景介绍 在线用户检测是一项重要的...

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

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

    什么是java的守护线程.pdf

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

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

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

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

    这个例子里main函数是唯一的用户线程,thread线程是守护线程,当main线程运行结束后,JVM发现当前已经没有用户线程了,就会终止JVM进程。 在JVM中,在main线程运行结束后,JVM会自动启动一个叫做DestroyJavaVM的...

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

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

    守护线程确保pushService

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

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

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

    java多线程thread实例

    - 守护线程是一种特殊的线程,当所有非守护线程结束时,守护线程也会自动终止。`setDaemon(true)`方法可以将线程设置为守护线程。 8. **线程池** - Java提供`ExecutorService`和`ThreadPoolExecutor`来管理线程池...

    JVM中的守护线程示例详解

    在Java虚拟机(JVM)中,线程分为两类:用户线程(User Thread)和守护线程(Daemon Thread)。这两类线程的主要区别在于它们的生命周期与JVM的关系。 1. **用户线程**:用户线程是应用程序中常见的线程类型,它们...

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

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

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

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

    Java多线程守护线程

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

Global site tag (gtag.js) - Google Analytics