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

Thread.setDaemon详解

    博客分类:
  • java
 
阅读更多
java中线程分为两种类型:用户线程和守护线程。通过Thread.setDaemon(false)设置为用户线程;通过Thread.setDaemon(true)设置为守护线程。如果不设置次属性,默认为用户线程。

用户线程和守护线程的区别:

1. 主线程结束后用户线程还会继续运行,JVM存活;主线程结束后守护线程和JVM的状态又下面第2条确定。

2.如果没有用户线程,都是守护线程,那么JVM结束(随之而来的是所有的一切烟消云散,包括所有的守护线程)。

补充说明:
定义:守护线程--也称“服务线程”,在没有用户线程可服务时会自动离开。
优先级:守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务。
设置:通过setDaemon(true)来设置线程为“守护线程”;将一个用户线程设置为守护线程的方式是在线程启动用线程对象的setDaemon方法。
example: 垃圾回收线程就是一个经典的守护线程,当我们的程序中不再有任何运行的Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是JVM上仅剩的线程时,垃圾回收线程会自动离开。它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。
生命周期:守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。也就是说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”。那Java的守护线程是什么样子的呢。当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则JVM不会退出。



import java.io.IOException;
class TestMain4 extends Thread {
   public void run() {            //永真循环线程
       for(int i=0;;i++){
           try {
               Thread.sleep(1000);
           } catch (InterruptedException ex) {   }
           System.out.println(i);
       }
   }

   public static void main(String [] args){
      TestMain4 test = new TestMain4();
      test.setDaemon(true);    //调试时可以设置为false,那么这个程序是个死循环,没有退出条件。设置为true,即可主线程结束,test线程也结束。
       test.start();
       System.out.println("isDaemon = " + test.isDaemon());
       try {
           System.in.read();   // 接受输入,使程序在此停顿,一旦接收到用户输入,main线程结束,守护线程自动结束
       } catch (IOException ex) {}
   }
}


转载地址:http://blog.csdn.net/xyls12345/article/details/26256693
分享到:
评论

相关推荐

    python使用Thread的setDaemon启动后台线程教程

    #### 三、`setDaemon()`方法详解 `setDaemon()`方法用于设置线程是否为后台线程。它只能在`Thread`对象启动前被调用,一旦线程启动后,就不能再改变其守护状态。 - **语法**:`thread.setDaemon(True)`或`thread....

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

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

    详解python中的线程与线程池

    - **`Thread.setDaemon()`**:设置线程为守护线程。守护线程会在非守护线程全部结束后退出。 - **`Thread.getName()`** 和 **`Thread.setName()`**:获取或设置线程的名称。 #### 线程池 线程池是一种用于管理线程...

    对python 多线程中的守护线程与join的用法详解

    守护线程:如果在程序中将子线程设置为守护线程,则该子线程会在主线程结束时自动退出,设置方式为thread.setDaemon(True),要在thread.start()之前设置,默认是false的,也就是主线程结束时,子线程依然在执行。...

    java多线程设计模式详解

    Java多线程设计模式是Java编程中不可或缺的一部分,它涉及到如何在并发环境下高效、安全地组织代码...阅读提供的"java多线程设计模式详解.pdf"和"Java多线程设计模式源码"文件,将能更深入地理解这些模式的实际运用。

    python多线程1

    【Python多线程详解】 一、线程介绍 线程是操作系统调度的基本单位,它比进程更细粒度,不独立拥有系统资源,而是共享进程内的资源。线程间的通信和资源共享更容易,使得多线程并行执行效率高于多进程。Python提供...

    JUC代码演示 Java多线程并发

    ### Java多线程并发知识点详解 #### 一、用户线程与守护线程 在Java中,线程分为用户线程(User Thread)和守护线程(Daemon Thread)。这两种线程的区别主要在于程序退出的方式: - **用户线程**:默认创建的...

    java多线程设计模式详解.rar

    通过调用`Thread.setDaemon(true)`方法可以将线程设置为守护线程。 3. **单例模式**:在多线程环境中,确保类只有一个实例并且提供一个全局访问点至关重要。Java中的双重检查锁定(Double-Checked Locking)是实现...

    java多线程设计模式详解PDF及源码

    通过调用`Thread.setDaemon(true)`可以将线程设置为守护线程。 4. **单例模式在多线程环境下的实现**:在多线程环境中,确保单例类的唯一实例是一个挑战。双重检查锁定(Double-Checked Locking)和静态内部类是两...

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

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

    ActiveMQ_使用failover模式进行连接切换时,线程断开

    ### ActiveMQ Failover模式下连接切换与线程断开问题详解 #### 一、问题背景及现象描述 在使用ActiveMQ消息中间件时,我们常常需要考虑如何在多个实例之间实现高可用性(HA)。其中一种常用的方式是采用**Failover...

    Java线程培训资料

    - 通过`Thread.setDaemon(boolean on)`方法设置线程为守护线程,通过`Thread.isDaemon()`方法检查一个线程是否为守护线程。 5. **线程组** - 线程组用于组织和管理线程,有助于实现安全性和保密性。 - 每个线程...

    java多线程高级设计模式详解

    Java中的`Thread.setDaemon(true)`方法可以将线程设置为守护线程,通常用于后台服务或清理工作。 六、线程间通信模式 Java的`wait()`, `notify()`和`notifyAll()`方法用于线程间的通信,实现对象状态的同步。在一个...

    python线程编程

    ### Python线程编程详解 在Python中,线程是一种轻量级的过程,它允许程序员同时执行多个任务。本文将深入探讨Python中的多线程技术,包括如何创建和管理线程、线程同步以及如何避免常见的多线程问题。 #### 理解...

    Java线程超时控制的实现.docx

    ### Java线程超时控制实现详解 #### 一、引言 在开发过程中,经常会遇到需要对线程执行时间进行限制的情况,例如与远程数据库的交互或网络数据的下载等耗时操作。为了提高程序的健壮性和用户体验,合理地控制这些...

Global site tag (gtag.js) - Google Analytics