守护(daemon)线程

本文探讨了Java中守护线程的概念,如何将UserThread设置为Daemon,并通过示例`ThreadDaemon`类展示了守护线程的作用,如后台任务处理。重点在于理解虚拟机对用户线程和守护线程执行的差异以及守护线程在程序退出时的行为。

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

守护线程

含义

线程分为用户线程和守护线程
虚拟机必须确保用户线程执行完毕
虚拟机不用等待守护线程执行完毕
如,后台记录操作日志,监控内存,垃圾回收等待。。

测试

package com.Thread;

public class ThreadDaemon {
    public static void main(String[] args) {
        //创建用户线程
        God god =new God();
        You you=new You();
        //使god变为守护线程
        Thread thread =new Thread(god);
        thread.setDaemon(true);//默认为false,都是用户线程
        thread.start();
        new Thread(you).start();


    }
}
class You implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i < 36500; i++) {
            System.out.println("快乐的混日子");
        }
        System.out.println("go die");
    }
}
class God implements Runnable{

    @Override
    public void run() {
        while(true){
            System.out.println("bless world");
        }
    }
}

注:b站狂神笔记。

### Daemon线程的概念 Daemon线程是一种特殊的线程,在Java和Python中都有定义。它通常用于在后台运行一些辅助性的任务,这些任务并不影响整个应用程序的核心功能[^2]。 #### Java中的Daemon线程Java中,可以通过`setDaemon(boolean on)`方法来设置一个线程守护线程。如果将某个线程标记为守护线程,则当JVM发现唯一剩下的都是守护线程时,会自动终止它们并退出程序。这意味着守护线程不会阻止JVM正常关闭[^1]。 ```java Thread daemonThread = new Thread(() -> { while (true) { System.out.println("I am a daemon thread."); try { Thread.sleep(1000); } catch (InterruptedException e) {} } }); daemonThread.setDaemon(true); daemonThread.start(); ``` #### Python中的Daemon线程 在Python中,可以利用`threading.Thread`类的`daemon`属性来设定线程是否为守护模式。一旦主线程完成其工作,所有的非守护线程将继续执行直到结束;而所有守护线程则会被强制停止[^3]。 ```python import threading import time def worker(): while True: print("Worker is running.") time.sleep(1) t = threading.Thread(target=worker) t.daemon = True # 设置为守护线程 t.start() time.sleep(5) # 主线程休眠一段时间后结束 print("Main thread finished.") ``` ### 使用场景与注意事项 - **使用场景**: 守护线程常用来处理诸如日志记录、监控状态更新或者资源释放等工作项。因为即使这些操作未完全结束也不会妨碍主要业务逻辑流程顺利完成。 - **注意事项**: 不应该让重要的计算依赖于守护线程,因为它可能随时被中断。另外需要注意的是,在某些框架下(如Tkinter GUI应用),如果不小心忘记把自定义的工作线程设成守护态的话,可能会遇到窗口已经关闭但进程仍然挂起的情况[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值