守护线程(Daemon线程)

[Q&A] 怎么设置守护线程?
可以通过调用Thread.setDaemon(true)将线程设置为Daemon线程。
注意:Daemon属性需要在启动线程之前设置,不能在启动线程之后设置。


[Q&A] 守护线程finally快的风险?
JVM中没有非Daemon线程时,虚拟机需要退出。此时Java虚拟机中的所有Daemon线程都需要立即终止,因此DaemonRunner立即终止,但是DaemonRunner中的finally块并没有执行。所以在构建Daemon线程时,不能依靠finally块中的内容来确保执行关闭或清理资源的逻辑。

-----------------------------------------------------------------------------读书笔记摘自 书名:Java并发编程的艺术 作者:方腾飞;魏鹏;程晓明


[Q&A] JVM程序在什么情况下会退出?
※The Java Virtual Machine exits when the only threads running are all daemon threads.
上面这句话来自于JDK的官方文档,当然这句话指的是正常退出的情况,而不是调用了System.exit()方法,通过这句话的描述,我们不难发现,在正常情况下,若JVM中没有一个非守护线程,则JVM的进程会退出


[Q&A] 守护线程的作用
守护线程经常用作与执行一些后台任务,因此有时它也被称为后台线程,当你希望关闭某些线程的时候,或者退出JVM进程的时候,一些线程能够自动关闭,此时就可以考虑用守护线程为你完成这样的工作。

-----------------------------------------------------------------------------读书笔记摘自书名:Java高并发编程详解:多线程与架构设计 作者:汪文君

在这里插入图片描述
[Q&A] 由守护线程构成的线程池的作用

public static ThreadFactory build(String nameFormat) {
    return new ThreadFactoryBuilder().setDaemon(true).setNameFormat(nameFormat).build();
}

Java程序无法终止或者退出一个正在运行中的线程,所以最后剩下的那个线程会由于一直等待无法发生的事件而引发问题。如果将线程标记为守护进程,意味着程序退出时它也会被回收。这二者之间没有性能上的差异。

-----------------------------------------------------------------------------读书笔记摘自书名:《Java8 实战》第11章 CompletableFuture:组合式异步编程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值