什么是守护线程
a. 在客户/服务器模式下,服务器的作用是等待用户发来请求,并按请求完成客户的工作
b. 守护线程是为其它线程提供服务的线程,如定时器线程
c. 守护线程一般应该是一个独立的线程,它的run()方法是一个无限循环
d. 守护线程与其它线程的区别是:如果守护线程是唯一运行着的线程,程序会自动退出
e. 把线程变成一个守护线程:r.setDeamon(true);
实例1:
package com.bijian.thread; import static java.util.concurrent.TimeUnit.*; public class DaemonTest { public static void main(String[] args) throws InterruptedException { Runnable r = new Runnable() { public void run() { for (int time = 10; time > 0; --time) { System.out.println("Time #" + time); try { SECONDS.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } } } }; Thread t = new Thread(r); t.setDaemon(true); // try to set this to "false" and see what happens t.start(); System.out.println("Main thread waiting..."); SECONDS.sleep(6); System.out.println("Main thread exited."); } }
运行结果:
Main thread waiting... Time #10 Time #9 Time #8 Main thread exited. Time #7
将t.setDaemon(true);语句改为t.setDaemon(false);运行结果如下:
Main thread waiting... Time #10 Time #9 Time #8 Main thread exited. Time #7 Time #6 Time #5 Time #4 Time #3 Time #2 Time #1
实例2:
package com.bijian.thread; public class MyThread extends Thread { public void run() { System.out.println("Daemon is " + isDaemon()); while (true) { ; } } }
package com.bijian.thread; public class UserDaemonThreadDemo { public static void main(String[] args) { if (args.length == 0) new MyThread().start(); else { MyThread mt = new MyThread(); mt.setDaemon(true); mt.start(); } try { Thread.sleep(1000); } catch (InterruptedException e) { } } }
如果不设置参数,即args.length == 0,运行结果如下:
Daemon is false
且程序一直运行
如果随便设置一个参数,即args.length != 0,设置过程如下
运行结果如下:
Daemon is true
且程序1秒后退出
相关推荐
在Linux系统中,C++编程时常常需要创建守护线程(daemon thread)来执行特定的任务,比如监控系统状态、定时任务或确保某个服务始终运行。守护线程是一种长期运行的后台进程,它不依赖于终端会话,即使用户注销或者...
守护线程是一种特殊的线程,它在应用程序启动时创建,并在所有其他非守护线程结束后继续运行,直到应用程序关闭。在ASP.NET环境中,我们可以巧妙地运用守护线程来定期更新在线用户列表。 首先,我们需要创建一个...
根据提供的信息,我们可以详细探讨如何在ASP.NET中实现在线用户检测功能,并且通过使用后台守护线程来确保这一过程能够持续有效地运行。 ### ASP.NET中实现在线用户检测 #### 背景介绍 在线用户检测是一项重要的...
java daemon 程序,有助于理解守护线程的概念和使用
精灵线程(Daemon)或守护线程---马克-to-win java视频
很多人对java的线程不是很了解,甚至连守护线程都么有听过,其实很简单,守护线程就是普通的线程,区别再于,他就是类似一个秘书一样,记录着所有的非守护线程的信息等等,守护线程,是指为工作线程做相关统计、汇总...
在Java编程语言中,守护线程(Daemon Thread)被称为“变形金刚中的守护神”,这是因为它们在后台默默地工作,为应用程序提供必要的服务,而不会阻止程序的退出。理解并正确使用守护线程是Java多线程编程中的一个...
在Java编程中,守护线程(Daemon Thread)是一种特殊的线程类型,它的主要作用是为应用程序提供后台服务,而不会阻止程序的退出。当所有的非守护线程(用户线程)结束时,JVM会自动关闭守护线程并退出。在本项目...
守护线程,也被称为后台线程,是Java编程语言中的一种特殊线程类型。它们的主要特点是在所有非守护线程(用户线程)结束后,守护线程才会被系统强制结束。在Windows环境下,通常我们使用服务来实现长期运行的任务,...
Java中的守护线程(Daemon Thread)是Java虚拟机(JVM)的一种特殊线程类型,它们在后台执行任务,主要用于为应用程序的其他非守护线程提供服务。守护线程的一个典型例子是垃圾回收器(Garbage Collector),它默默...
在Android应用开发中,"守护线程确保pushService"是一个重要的技术实践,主要目的是确保即使在主应用程序进程被系统回收或者用户关闭后,仍然能够保持某些关键服务的运行,例如推送服务。这样的做法对于实时性要求高...
守护线程模式在Java设计模式中对于管理需要锁和条件才能继续执行的操作至关重要。它通过允许线程有效地等待合适的条件来优化并发控制。 ## 二、详细解释及实际示例 1. **实际示例**: - 守护线程模式的一个实际...
浅谈java的守护线程与非守护线程 在Java中,有两类线程:UserThread(用户线程)和Daemon Thread(守护线程)。守护线程的作用是为其他线程的运行提供服务,比如说GC线程。它们的本质上来说没有区别,唯一的区别...
Java守护线程与非守护线程详解 Java 中有两类线程:User Thread(用户线程)和 Daemon Thread(守护线程)。用户线程即运行在前台的线程,而守护线程是运行在后台的线程。守护线程的作用是为其他前台线程的运行提供...
"Java守护线程与用户线程详解" Java中的线程可以分为守护线程(DaemonThread)和用户线程(UserThread)两类。守护线程和用户线程的唯一区别是它们对虚拟机的退出(程序的终止)的影响。 当JVM中只有守护线程时,虚拟机会...
浅谈java中守护线程与用户线程 本篇文章主要介绍了java中守护线程与用户线程的概念和区别。Java中的线程可以分为两类,即daemon线程(守护线程)和User线程(用户线程)。守护线程是一种特殊的线程,它们的生命周期...
Python中的守护进程(daemon process)、守护线程(daemon thread)以及如何实现守护和非守护的并行处理是多任务编程中的重要概念。在Python中,这些功能主要通过`multiprocessing`和`threading`模块来实现。 守护...
在Java中,线程分为两种类型:用户线程(User Thread)和守护线程(Daemon Thread)。这两种线程在大部分行为上是相同的,但它们在决定虚拟机何时退出时有显著差异。 用户线程是程序的主要部分,Java虚拟机(JVM)...
【守护线程详解】 在Java虚拟机(JVM)中,线程分为两类:用户线程(User Thread)和守护线程(Daemon Thread)。这两类线程的主要区别在于它们的生命周期与JVM的关系。 1. **用户线程**:用户线程是应用程序中...
Java中的线程分为两种类型:守护线程(Daemon)和用户线程(User)。这两类线程的主要区别在于它们对Java虚拟机(JVM)生命周期的影响。守护线程主要是为其他线程提供服务,比如垃圾回收线程,而用户线程则包含应用...