`

后台线程(守护线程)

 
阅读更多

所谓的后台线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分。因此当所有的非后台线程结束时,程序也就终止了,同时会杀死所有后台线程。反过来说,只要有任何非后台线程(用户线程)还在运行,程序就不会终止。后台线程在不执行finally子句的情况下就会终止其run方法。后台线程创建的子线程也是后台线程。

下面是一个后台线程的示例:

    <span style="font-size:16px;">package demo.thread; 
     
    import java.util.concurrent.TimeUnit; 
     
    public class DaemonDemo implements Runnable { 
        @Override 
        public void run() { 
            try { 
                while (true) { 
                    Thread.sleep(1000); 
                    System.out.println("#" + Thread.currentThread().getName()); 
                } 
            } catch (InterruptedException e) { 
                e.printStackTrace(); 
            } finally {// 后台线程不执行finally子句 
                System.out.println("finally "); 
            } 
        } 
     
        public static void main(String[] args) { 
            for (int i = 0; i < 10; i++) { 
                Thread daemon = new Thread(new DaemonDemo()); 
                // 必须在start之前设置为后台线程 
                daemon.setDaemon(true); 
                daemon.start(); 
            } 
            System.out.println("All daemons started"); 
            try { 
                TimeUnit.MILLISECONDS.sleep(1000); 
            } catch (InterruptedException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } 
        } 
    } 
    </spspan> 
 

运行结果:

All daemons started
#Thread-2
#Thread-3
#Thread-1
#Thread-0
#Thread-9
#Thread-6
#Thread-8
#Thread-5
#Thread-7
#Thread-4

分析:从结果可以看出,十个子线程并没有无线循环的打印,而是在主线程(main())退出后,JVM强制关闭所有后台线程。而不会有任何希望出现的确认形式,如finally子句不执行

分享到:
评论

相关推荐

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

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

    线程守护程序

    创建守护线程的常见应用场景包括后台服务、资源清理、日志记录等。这些任务不直接影响程序的主要业务逻辑,但对程序的健康运行至关重要。例如,一个守护线程可能负责定期检查系统的内存使用情况,并在内存不足时释放...

    Java后台线程操作示例【守护线程】

    Java后台线程操作示例【守护线程】 Java后台线程操作示例【守护线程】是Java多线程编程中的一种重要概念,主要介绍了Java后台线程操作的原理、操作技巧与使用注意事项。下面我们将详细介绍Java后台线程操作示例...

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

    本教程将详细讲解如何利用后台守护线程来完成这一任务。守护线程是一种特殊的线程,它在应用程序启动时创建,并在所有其他非守护线程结束后继续运行,直到应用程序关闭。在ASP.NET环境中,我们可以巧妙地运用守护...

    进程与线程的案例,有同步、前后台线程、线程相关属性、有参线程和无参线程等众多案例

    守护线程是一种特殊类型的线程,当所有非守护线程结束时,即使还有守护线程在运行,程序也会终止。 总结来说,进程与线程是操作系统并发执行任务的基础。理解它们的工作原理,掌握线程同步、前后台线程的概念,以及...

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

    System.out.println("后台线程第" + i + "次执行!"); try { Thread.sleep(7); } catch (InterruptedException e) { e.printStackTrace(); } } } } ``` 在这个例子中,`MyCommon`线程是用户线程,而`...

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

    1. 守护线程是运行在程序后台的线程。 2. 守护线程创建的进程依然是守护进程。 3. 守护线程不会影响JVM的退出,当JVM只剩余守护进程时,JVM进行退出。 4. 守护线程在JVM退出时,自动销毁。 在开发Java守护线程时,...

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

    用户线程即运行在前台的线程,而守护线程是运行在后台的线程。守护线程的作用是为其他前台线程的运行提供便利服务,而且仅在普通、非守护线程仍然运行时才需要。 守护线程的特点是,当 JVM 检测仅剩一个守护线程,...

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

    守护线程是一种长期运行的后台进程,它不依赖于终端会话,即使用户注销或者关闭了终端,守护线程依然可以继续工作。 在本场景中,我们要实现的功能是通过守护线程来检查一个程序(假设为`target_program`)是否正在...

    java两个线程互相守护

    通常,后台服务或者定时任务等不直接影响程序主要功能的线程会被设置为守护线程。 在Java中,我们可以通过`Thread.setDaemon(true)`方法将一个线程设置为守护线程,该方法必须在线程启动前调用。例如: ```java ...

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

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

    java多线程例子

    在上面的代码中,我们创建了一个名为 TestThread 的线程类,并将其设置为后台线程(守护线程)。然后,我们启动了该线程。在 main 方法中,我们不再有任何输出语句,因为后台线程自动退出。 第三个例子:线程 join...

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

    守护线程的实际应用场景很多,例如在web服务器中的Servlet,容器启动时后台初始化一个服务线程。守护线程可以提供一些基础服务,例如GC线程、定时器线程等。守护线程是一种特殊的线程机制,用于提供一些基础服务,而...

    Java中后台线程实例解析

    Java中的后台线程,也称为守护线程(daemon),在程序运行中扮演着重要的角色,尤其是在需要持续提供服务而不需要直接影响程序生命周期的情况下。本文将深入探讨后台线程的概念、其特性以及如何在Java中创建和管理...

    java多线程Demo

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

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

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

    守护进程和多线程的创建和管理

    守护进程和多线程是操作系统中的重要概念,它们在后台执行任务,支持系统服务和应用程序的高效运行。守护进程(daemon)通常不与任何终端关联,独立于控制终端并作为后台进程运行。在Linux系统中,以字母'd'结尾的...

    守护线程系统-含源码

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

    Java多线程笔记

    守护线程主要用作程序中后台调度以及支持性工作。当一个 Java 虚拟机中不 存 在 非 Daemon 线 程 的 时 候,Java 虚拟机将退 出。通过 setDaemon(true) 方法可以设置守护线程,但是要在线程启动之前设置。在 Java ...

    什么是java的守护线程.pdf

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

Global site tag (gtag.js) - Google Analytics