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

java 中的守护线程

 
阅读更多

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


2.Daemon thread在Java里面的定义是,如果虚拟机中只有Daemon thread 在运行,则虚拟机退出。 
  虚拟机中可能会同时有很多个线程在运行,只有当所有的非守护线程都结束的时候,虚拟机的进程才会结束,不管在运行的线程是不是main()线程。


3.Main主线程结束了(Non-daemon thread),如果此时正在运行的其他threads是daemon threads,JVM会使得这个threads停止,JVM也停下.
  如果此时正在运行的其他threads有Non-daemon threads,那么必须等所有的Non daemon线程结束了,JVM才会停下来.


4.总之,必须等所有的Non-daemon线程都运行结束了,只剩下daemon的时候,JVM才会停下来,注意Main主程序是Non-daemon线程.


5.默认产生的线程全部是Non-daemon线程.

 

 
  1. class   A   implements   Runnable{    
  2.           public   void   run(){    
  3.                   for(;;){    
  4.                           System.out.println("Thread   A   run");    
  5.                   }    
  6.           }    
  7.      
  8.           public   static   void   main(String[]   args){    
  9.                   System.out.println("Thread   main   started!");    
  10.                   try{    
  11.                           (new   Thread(new   A())).start();    
  12.                   }   catch   (Exception   e){    
  13.                   }    
  14.                   System.out.println("Thread   main   ended!");    
  15.           }    
  16.   };    

    
  会一直跑下去,因为main进程结束了,但     进程还没有结束,虚拟机不能退出,  
   
  

 
  1. class   A   implements   Runnable{    
  2.           public   void   run(){    
  3.                   for(;;){    
  4.                           System.out.println("Thread   A   run");    
  5.                   }    
  6.           }    
  7.      
  8.           public   static   void   main(String[]   args){    
  9.                   System.out.println("Thread   main   started!");    
  10.                   try{    
  11.                           Thread   a   =   new   Thread(new   A());    
  12.                           a.setDaemon(true);    
  13.                           a.start();    
  14.                   }   catch(Exception   e){    
  15.                   }    
  16.                   System.out.println("Thread   main   ended!");    
  17.           }    
  18.   };    

    
  main   线程一退出,虚拟机就退出了,因为剩下在跑的     线程是守护线程,虚拟机不管它的死活的,直接退出了。

分享到:
评论

相关推荐

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

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

    java daemon 守护线程实例

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

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

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

    java中守护进程小结

    Java中的守护线程(Daemon Threads)是用于支持应用程序运行的重要组件,它们在后台执行任务,不会阻止Java虚拟机(JVM)的退出。守护线程的主要任务是为其他非守护线程提供服务,例如垃圾回收线程就是典型的守护...

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

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

    什么是java的守护线程.pdf

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

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

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

    JAVA最新面试资料-备战2023金三银四

    1、在 java 中守护线程和本地线程区别? java 中的线程分为两种:守护线程(Daemon)和用户线程(User)。任 何线程都可以设置为守护线程和用户线程,通过方法 Thread.setDaemon(boolon);true 则把该线程设置为守护...

    java多线程Demo

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

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

    例如,在守护线程中执行文件输出操作时,可能由于虚拟机的退出而导致文件无法写入。 守护线程的实际应用场景很多,例如在web服务器中的Servlet,容器启动时后台初始化一个服务线程。守护线程可以提供一些基础服务,...

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

    java线程第二版中英文 java线程第二版中英文 线程并不是新的概念:许多操作系统和语言都支持它们。在Java出现以前,似乎人人都在谈论线程,却很少有人使用它。用线程编程是技巧性很强的且不可移植。 而在Java中却...

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

    同时,如果在守护线程中创建新的线程,这些新线程也将默认成为守护线程,反之亦然。 以下是一个简单的示例,展示了如何创建并启动一个守护线程: ```java public class DaemonExample extends Thread { public ...

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

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

    java两个线程互相守护

    在Java中,我们可以通过`Thread.setDaemon(true)`方法将一个线程设置为守护线程,该方法必须在线程启动前调用。例如: ```java Thread thread = new Thread(() -> { // 线程任务 }); thread.setDaemon(true); ...

    java中线程的应用例子

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

    java多线程设计模式_java_设计模式_多线程_多线程课题_

    守护线程在所有用户线程结束后自动终止,常用于后台服务,如垃圾回收。通过调用Thread.setDaemon(true)方法,可以将线程设置为守护线程。 八、线程安全的集合 Java提供了一些线程安全的集合类,如ConcurrentHashMap...

    java多线程的讲解和实战

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

    Java_多线程与并发编程总结.doc

    默认情况下,Java程序的main方法在一个称为主线程的线程中运行。当main方法执行完毕,主线程结束,JVM进程也会随之退出。 Java提供了两种创建线程的方式:一是继承自`java.lang.Thread`类,二是实现`java.lang....

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

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

    java实现守护进程,有单独的监听进程, 两个或多个进程,两个或多个jvm

    Java中的`java.lang.Runtime`和`java.lang.ProcessBuilder`类可以帮助我们启动新的进程,而`java.util.concurrent`包下的线程类则可以用来创建守护线程。 首先,让我们了解如何创建一个监听进程。监听进程通常是...

Global site tag (gtag.js) - Google Analytics