Java并发-守护线程(Daemon)

本文介绍了Java中的守护线程(Daemon),这类线程在后台提供服务,当程序中非守护线程结束时,守护线程也会随之终止。文章通过实例展示了守护线程的使用,并强调在守护线程终止时不执行finally语句块,因此不应在守护线程中处理资源释放操作。

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

Deamon线程通常是一种在后台提供通用服务的线程,当程序中的非后台线程全部终止时,deamon线程也就终止了。

setDaemon(boolean isDaemon)方法的一段注释:

The Java Virtual Machine exits when the only threads running are all daemon threads.

意思就是当运行中的线程只剩下守护线程时,jvm将会退出。

下面看一个守护线程的实例:

public class DaemonTest {

    public static void main(String[] args) throws Exception {

        //启动10个daemon线程
        for (int i = 0;i < 10;i ++) {
            Thread thread = new Thread(new DaemonTask());
            thread.setDaemon(true);
            thread.start();
        }
        System.out.println("All Daemon Thread have been started.");
        TimeUnit.SECONDS.sleep(3);
        System.out.println("Main Thread has completed.");
    }
}

class DaemonTask implements Runnable {

    @Override
    public void run() {
        try{
            while (!Thread.interrupted()) {
                System.out.println("Daemon thread is running...");
                TimeUnit.SECONDS.sleep(1);
            }
        }catch (Exception ex) {
            ex.printStackTrace();
        }finally {
            System.out.println(Thread.currentThread().getName() + " : Daeming finally block.");
        }
    }
}

当主线程运行完成时,所有daemon线程都会立即终止。

需要注意的是,daemon线程被终止时,既不会抛出异常,也不执行finally语句块,所以,不应该在daemon线程中进行资源释放的操作,因为没有办法保证一定被执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值