`

Java Daemon线程

 
阅读更多
所谓守护线程就是运行在程序后台的线程,程序的主线程Main(比方java程序一开始启动时创建的那个线程)不会是守护线程

2.Daemon thread在Java里面的定义是,如果虚拟机中只有Daemon thread在运行,则虚拟机退出。
虚拟机中可能会同时有很多个线程在运行,只有当所有的非守护线程都结束的时候,虚拟机的进程才会结束,不管在运行的线程是不是main()线程。
3.Main主线程结束了(Non-daemon thread),如果此时正在运行的其他threads是daemonthreads,JVM会使得这个threads停止,JVM也停下
  如果此时正在运行的其他threads有Non-daemonthreads,那么必须等所有的Non daemon线程结束了,JVM才会停下来
4.总之,必须等所有的Non-daemon线程都运行结束了,只剩下daemon的时候,JVM才会停下来,注意Main主程序是Non-daemon 线程
默认产生的线程全部是Non-daemon线程。
5.JVM的资源回收线程就是这类线程。
6.在该类线程中产生的其他线程不用设置,默认都是守护线程。
5.Thread.setDaemon()用法使用:

1. setDaemon需要在start方法调用之前使用

2. 线程划分为用户线程和后台(daemon)进程,setDaemon将线程设置为后台进程

3. 如果jvm中都是后台进程,当前jvm将exit。(随之而来的,所有的一切烟消云散,包括后台线程啦)

4. 主线程结束后,

      1)用户线程将会继续运行

     2) 如果没有用户线程,都是后台进程的话,那么jvm结束

另外:

setDaemon方法把java的线程设置为守护线程,此方法的调用必须在线程启动之前执行。只有在当前jvm中所有的线程都为守护线程时,jvm才会退出。
如果创建的线程没有显示调用此方法,这默认为用户线程。

实例如下:

import java.io.IOException;

public class DaemonThreadTest extends Thread{
    
    publicDaemonThreadTest() {
   }
  
    public voidrun(){
       for(int i = 1; i <= 100;i++){
           try{
               Thread.sleep(100);
                
           } catch (InterruptedException ex){
               ex.printStackTrace();
           }
           System.out.println(i);
       }
   }
    publicstatic void main(String [] args){
       DaemonThreadTest test = newDaemonThreadTest();
       // 如果不设置daemon,那么线程将输出100后才结束
       test.setDaemon(true); //在test未结束前,执行下面的输入操作,则test终止执行,因为jvm中只剩下守护线程时会终止
       test.start();
       System.out.println("isDaemon = " +test.isDaemon());
       try {
           System.in.read(); //接受输入,使程序在此停顿,一旦接收到用户输入,main线程结束,守护线程自动结束
       } catch (IOException ex) {
           ex.printStackTrace();
       }
       System.out.print(Thread.currentThread().getName()+"结束");
   }
}
分享到:
评论

相关推荐

    java daemon 守护线程实例

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

    java多线程的讲解和实战

    5. **守护线程(Daemon)**:守护线程是一种不会阻止程序退出的特殊线程,例如JVM的垃圾收集器就是守护线程。通过`setDaemon(true)`方法将线程设置为守护线程。 6. **线程池**:Java提供`ExecutorService`和`...

    java多线程Demo

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

    Java多线程机制(讲述java里面与多线程有关的函数)

    守护线程(Daemon)是一种不阻止程序退出的线程,如垃圾收集器就是守护线程。当所有非守护线程结束时,程序会终止,即使还有守护线程在运行。 掌握Java的多线程机制对于编写高效、并发友好的应用程序至关重要,它...

    java 多线程示例

    8. **守护线程(Daemon Thread)** 守护线程不会阻止程序的退出,如JVM的垃圾收集器就是守护线程。可以通过`setDaemon(true)`将线程设置为守护线程。 9. **线程池** Java的`ExecutorService`和`...

    Java多线程练习题

    2.守护线程(Daemon Thread):后台运行的线程,当所有非守护线程结束时,守护线程也会自动结束。 六、线程池 Java提供ExecutorService和ThreadPoolExecutor来管理线程,可以避免频繁创建和销毁线程带来的开销,...

    Java多线程详解及示例

    守护线程(Daemon Thread)是一种特殊线程,当所有非守护线程结束时,守护线程也会随之结束,通常用于后台服务。 总结: Java多线程编程是提升程序性能和响应性的关键技术。理解多线程的概念,掌握线程的创建、同步...

    Java多线程编程线程的协同、停止、暂停、继续等操作实现

    6. **守护线程(Daemon Threads)** 守护线程是一种特殊类型的线程,它不会阻止程序的退出。Java中的`Thread.setDaemon(true)`方法可将线程设置为守护线程。通常,后台服务或日志记录线程可以设置为守护线程。 7. ...

    java多线程示例

    七、守护线程(Daemon) 守护线程在所有非守护线程结束时自动终止,通常用于后台服务,如垃圾收集器。 通过以上知识点,我们可以更好地理解和运用Java多线程,实现高效、稳定的并发程序。文档“java多线程实例.docx...

    Java多线程测试程序,

    在Java中,可以使用Thread的join()方法等待线程结束,或者设置Daemon线程使其在所有非Daemon线程结束后自动终止。在适当的时候,还需要优雅地终止线程,防止资源泄漏。 总之,"Java多线程测试程序"结合了多线程和...

    精通java多线程

    守护线程(Daemon Thread)是一种特殊的线程,当所有非守护线程结束时,程序会自动结束,即使还有守护线程在运行。Java的Thread类的setDaemon()方法可以将线程设置为守护线程。 八、线程池 Java的ExecutorService和...

    【JAVA多线程】多线程编程核心技术学习资料

    4. 守护线程(Daemon Thread):这种线程在没有其他非守护线程运行时会自动结束,常用于后台服务,如垃圾回收器。 5. 死锁、活锁和饥饿:线程安全编程中需要避免这些问题,死锁是两个或更多线程相互等待对方释放...

    JAVA多线程教材

    守护线程(Daemon Thread)是一种特殊类型的线程,当它是系统中唯一运行的线程时,JVM会自动退出。 5. **并发集合与并发工具类**:Java提供了一系列并发友好的集合,如ConcurrentHashMap、CopyOnWriteArrayList等,...

    Java多线程笔记

    在 Java 虚拟机退出时,Daemon 线程中的 finally 块并不一定会执行。 构造线程 一个新构建的线程对象是由其父线程来进行空间分配的,而子线程继承了父线程的是否为 Daemon、优先级和加载资源的 contextClassLoader...

    java 多线程.ppt,多线程

    10. 守护线程(Daemon Thread): 守护线程是一种特殊类型的线程,它不阻碍程序的退出。当所有非守护线程结束时,JVM会停止运行,即使还有守护线程在运行。通过setDaemon(true)方法可以将线程设置为守护线程。 ...

    JAVA多线程学习内容

    此外,守护线程(Daemon Thread)是一种特殊类型的线程,它们在所有非守护线程结束时自动终止,常用于后台服务,如垃圾收集器。 总的来说,Java多线程学习涵盖了线程的创建、同步、通信、调度以及异常处理等多个...

    java中线程的应用例子

    7. **守护线程(Daemon)**:守护线程不会阻止程序的退出,通常用于后台服务,如垃圾收集器。 8. **死锁(Deadlock)**:多个线程互相等待对方释放资源导致的僵局,需要谨慎设计并发逻辑以避免这种情况。 9. **...

    Java多线程结构_Java多线程结构_

    8. 守护线程(Daemon Thread): 守护线程不会阻止程序的退出,常用于后台服务,如垃圾回收器就是守护线程。 9. 线程优先级: Java线程有10个优先级,从Thread.MIN_PRIORITY(1)到Thread.MAX_PRIORITY(10),但...

    【IT十八掌徐培成】Java基础第08天-02.多线程-join-daemon-同步.zip

    在Java中,`join()`、`daemon`线程以及同步机制是多线程编程中的重要概念,对于理解和编写高效的并发代码至关重要。 首先,我们来讨论`join()`方法。在多线程环境中,有时候我们需要确保一个线程在执行完它的任务后...

    java多线程测试实例

    - 守护线程(Daemon Thread)是一种后台线程,当所有非守护线程结束时,程序退出,即使守护线程仍在运行。通过`setDaemon(true)`方法设置。 7. **线程池** - `ExecutorService`和`ThreadPoolExecutor`是Java并发...

Global site tag (gtag.js) - Google Analytics