Daemon thread

本文详细介绍了Java中守护线程的概念及其应用场景。解释了守护线程如何与用户线程交互,以及守护线程对Java虚拟机(JVM)生命周期的影响。通过一个具体的示例展示了如何设置和使用守护线程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、所谓守护线程就是运行在程序后台的线程,程序的主线程Main(比方java程序一开始启动时创建的那个线程)不会是守护线程 
2.Daemon thread在Java里面的定义是,如果虚拟机中只有Daemon thread在运行,则虚拟机退出。 
  虚拟机中可能会同时有很多个线程在运行,只有当所有的非守护线程都结束的时候,虚拟机的进程才会结束。 如果创建的线程没有显示调用此方法,这默认为用户线程。
3.JVM的资源回收线程就是这类线程。 在该类线程中产生的其他线程不用设置,默认都是守护线程。
4.Thread.setDaemon()用法使用:

(1)setDaemon必须要在start方法调用之前使用

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

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

(4)主线程结束后,

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

     2) 如果没有用户线程,都是后台进程的话,那么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()+"结束");
   

在Python中,线程(thread)是一种并发执行任务的方式。线程可以是守护线程(daemon thread)或者非守护线程。守护线程是一种在后台运行的线程,当主线程结束时,守护线程会自动退出,而不会阻止程序的结束。 以下是关于Python守护线程的一些关键点: 1. **创建守护线程**: 使用`threading.Thread`类创建线程时,可以通过设置`daemon`参数为`True`来创建守护线程。 ```python import threading import time def worker(): while True: print("I am a daemon thread") time.sleep(1) daemon_thread = threading.Thread(target=worker) daemon_thread.daemon = True daemon_thread.start() ``` 2. **主线程结束**: 当主线程结束时,所有守护线程都会被强制终止。 ```python import threading import time def worker(): while True: print("I am a daemon thread") time.sleep(1) daemon_thread = threading.Thread(target=worker) daemon_thread.daemon = True daemon_thread.start() time.sleep(3) print("Main thread is ending") ``` 在这个例子中,主线程休眠3秒后结束,守护线程也会随之结束。 3. **非守护线程**: 如果线程不是守护线程,主线程会等待所有非守护线程结束后才结束。 ```python import threading import time def worker(): for i in range(5): print("I am a non-daemon thread") time.sleep(1) non_daemon_thread = threading.Thread(target=worker) non_daemon_thread.daemon = False non_daemon_thread.start() time.sleep(3) print("Main thread is ending") ``` 在这个例子中,主线程会等待非守护线程执行完所有任务后才结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值