`
endual
  • 浏览: 3566628 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 线程分类-守护线程

    博客分类:
  • java
 
阅读更多

java 线程分类-守护线程  

2009-03-11 17:32:57|  分类: java程序设计 |  标签: |字号 订阅

java 线程分类-守护线程

 

 

守护线程(Daemon)

Java有两种Thread:“守护线程Daemon”与“用户线程User”。

我们之前看到的例子都是用户,守护线程是一种“在后台提供通用性支持”的线程,它并不属于程序本体。

从字面上我们很容易将守护线程理解成是由虚拟机(virtual machine)在内部创建的,而用户线程则是自己所创建的。事实并不是这样,任何线程都可以是“守护线程Daemon”或“用户线程User”。他们在几乎每个方面都是相同的,唯一的区别是判断虚拟机何时离开:

用户线程:Java虚拟机在它所有非守护线程已经离开后自动离开。

守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。

setDaemon(boolean on)方法可以方便的设置线程的Daemon模式,true为Daemon模式,false为User模式。setDaemon(boolean on)方法必须在线程启动之前调用,当线程正在运行时调用会产生异常。isDaemon方法将测试该线程是否为守护线程。值得一提的是,当你在一个守护线程中产生了其他线程,那么这些新产生的线程不用设置Daemon属性,都将是守护线程,用户线程同样。

例:我们所熟悉的Java垃圾回收线程就是一个典型的守护线程,当我们的程序中不再有任何运行中的Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是Java虚拟机上仅剩的线程时,Java虚拟机会自动离开。

       守护线程是为其他线程的运行提供便利的线程。守护线程不会阻止程序的终止。

      非守护线程包括常规的用户线程或诸如用于处理GUI事件的事件调度线程。

       程序可以包含守护线程和非守护线程。

       当程序只有守护线程时,该程序便可以结束运行。

       如果要使一个线程成为守护线程,则必须在调用它的start方法之前进行设置(通过以true作为参数调用线程的setDaemon方法,可以将该线程定义为一个守护线程),否则会抛出IllegalThreadStateException异常。如果线程是守护线程,则isDaemon方法返回真。

注:1、如果在线程已经启动后,再试图使该线程成为守护线程,则会导致IllegalThreadStateException异常。

     2、事件调度线程是一个无穷循环的线程,而不是守护线程。因而,在基于窗口的应用程序调用System类的exit方法之前,事件调度线程不会终止。

     3、不能将关键任务分配给守护线程。这些任务将会在事先没有警告的情况下终止,这可能导致不能正确地完成它们。

分享到:
评论

相关推荐

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

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

    Java多线程编程总结

    Java线程:线程的调度-守护线程 Java线程:线程的同步-同步方法 Java线程:线程的同步-同步块 Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 ...

    JAVA多线程--信号量(Semaphore)_.docx

    JAVA多线程--信号量(Semaphore) 信号量(Semaphore)是一种多线程环境下的设施,负责协调各个线程,以保证它们能够正确、合理地使用公共资源。从概念上讲,信号量维护了一个许可集。 信号量的类型有两种:单值信号...

    Java多线程-多线程知识点总结和企业真题

    - 守护线程是为了服务用户线程而存在的,当用户线程结束时,守护线程也会自动结束。 - **题5**:解释`join()`方法的作用。 - `join()`方法使当前线程等待另一个线程结束。 3. **常用方法、生命周期** - **题1**...

    JAVA-JavaThreadProgramming-Sams.zip_JAVA 设计_java 多线程_java 线程_多线程

    Java线程编程是Java开发中的重要组成部分,尤其在构建高性能、高并发的应用程序时不可或缺。本资料"JAVA-JavaThreadProgramming-Sams.zip"提供了一套详细的教程,旨在深入讲解Java中的多线程设计和实现。 Java多...

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

    综上所述,这个压缩包中的"守护线程--源码--练手"项目提供了一个在Windows环境下实现非服务形式的守护线程示例,可以帮助开发者理解和实践Java守护线程的使用。通过阅读和分析源代码,我们可以学习到如何创建、设置...

    线程 JAVA java线程 java线程第3版 java线程第2版第3版合集

    电子书相关:包含4个有关JAVA线程的电子书(几乎涵盖全部有关线程的书籍) OReilly.Java.Threads.3rd.Edition.Sep.2004.eBook-DDU Java Thread Programming (Sams) java线程第二版中英文 java线程第二版中英文 ...

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

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

    Java多线程-Thread类的常用结构及线程优先级

    守护线程主要用于为应用程序提供后台服务,如垃圾收集器就是守护线程。当所有非守护线程结束后,即使还有守护线程在运行,JVM也会退出。可以通过`setDaemon(true)`方法将线程设置为守护线程。 总结: 理解并熟练...

    java-Thread-study-summary.zip_java 多线程

    Java线程有10个优先级,`MIN_PRIORITY`(1),`NORM_PRIORITY`(5)和`MAX_PRIORITY`(10)。较高的优先级并不意味着线程一定先执行,而是增加了获取CPU资源的概率。 5. **守护线程(Daemon)** 守护线程是支持...

    Java线程培训资料

    ### Java线程培训资料知识点详解 #### 一、Java线程基本概念 1. **如何编写与启动线程** - **方式一:继承Thread类** ```java class MyThread extends Thread { @Override public void run() { // 业务逻辑 ...

    Java多线程学习-动力节点共22页.pdf.zip

    7. **守护线程和用户线程**:Java线程分为守护线程和用户线程。守护线程主要负责后台服务,例如垃圾回收。当所有用户线程都结束时,守护线程也会自动结束。而用户线程是应用程序的主要执行部分,至少有一个用户线程...

    java常见面试题---线程篇

    以下是一些关于Java线程的常见面试知识点,这些内容可能出现在线程.doc文档中: 1. **线程的创建方式**: - 实现`Runnable`接口:创建一个类实现`Runnable`接口,并重写`run()`方法,然后将实例传递给`Thread`类的...

    守护线程系统-含源码

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

    java多线程Demo

    Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...

    Java线程-第三版(CHM电子版)

    8. **守护线程与用户线程**:解释守护线程(Daemon Thread)的概念,以及它与用户线程的关系,如何创建和使用守护线程。 9. **并发编程最佳实践**:提供一系列实用的并发编程技巧和最佳实践,以提高代码的可读性、...

    北大Java--多线程

    - Java线程有优先级,通过`setPriority()`方法设置。线程调度策略可能依赖于操作系统的具体实现,但通常优先级高的线程会被优先调度。 5. **多线程的互斥与同步**: - 互斥是指在同一时刻,只有一个线程能访问...

    java基础--11.多线程

    - Java线程有10个优先级,从Thread.MIN_PRIORITY(1)到Thread.MAX_PRIORITY(10),默认优先级是Thread.NORM_PRIORITY(5)。优先级高的线程有机会先获得CPU资源,但并不保证。 4. **守护线程(Daemon)** - ...

    java线程入门,java线程入门

    Java线程是多任务编程的重要概念,特别是在Java这种支持并发执行的高级编程语言中。Java线程允许程序同时执行多个独立的代码段,这极大地提高了程序的效率和响应性。以下是对Java线程入门的详细讲解: 1. **线程的...

Global site tag (gtag.js) - Google Analytics