`

守护线程

阅读更多

什么是守护线程

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秒后退出
  • 大小: 54.8 KB
  • 大小: 117.2 KB
分享到:
评论

相关推荐

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

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

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

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

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

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

    java daemon 守护线程实例

    java daemon 程序,有助于理解守护线程的概念和使用

    精灵线程(Daemon)或守护线程---马克-to-win java视频

    精灵线程(Daemon)或守护线程---马克-to-win java视频

    java的守护线程+log4日志记录

    很多人对java的线程不是很了解,甚至连守护线程都么有听过,其实很简单,守护线程就是普通的线程,区别再于,他就是类似一个秘书一样,记录着所有的非守护线程的信息等等,守护线程,是指为工作线程做相关统计、汇总...

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

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

    守护线程系统-含源码

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

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

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

    什么是java的守护线程.pdf

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

    守护线程确保pushService

    在Android应用开发中,"守护线程确保pushService"是一个重要的技术实践,主要目的是确保即使在主应用程序进程被系统回收或者用户关闭后,仍然能够保持某些关键服务的运行,例如推送服务。这样的做法对于实时性要求高...

    【Java设计模式】守护线程模式

    守护线程模式在Java设计模式中对于管理需要锁和条件才能继续执行的操作至关重要。它通过允许线程有效地等待合适的条件来优化并发控制。 ## 二、详细解释及实际示例 1. **实际示例**: - 守护线程模式的一个实际...

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

    浅谈java的守护线程与非守护线程 在Java中,有两类线程:UserThread(用户线程)和Daemon Thread(守护线程)。守护线程的作用是为其他线程的运行提供服务,比如说GC线程。它们的本质上来说没有区别,唯一的区别...

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

    Java守护线程与非守护线程详解 Java 中有两类线程:User Thread(用户线程)和 Daemon Thread(守护线程)。用户线程即运行在前台的线程,而守护线程是运行在后台的线程。守护线程的作用是为其他前台线程的运行提供...

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

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

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

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

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

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

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

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

    JVM中的守护线程示例详解

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

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

    Java中的线程分为两种类型:守护线程(Daemon)和用户线程(User)。这两类线程的主要区别在于它们对Java虚拟机(JVM)生命周期的影响。守护线程主要是为其他线程提供服务,比如垃圾回收线程,而用户线程则包含应用...

Global site tag (gtag.js) - Google Analytics