守护线程
默认情况下,Java 进程需要等待所有的线程都运行完毕,才会结束,但是有一种特殊的线程叫做守护线程,当其它非守护线程运行完毕之后,它才会结束,即使守护线程有代码没有执行完,也会强制结束
示例一
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | @Slf4j public class ThreadDemo { public static void main(String[] args) throws InterruptedException { Runnable runnable = () -> { while ( true ) { if (Thread.currentThread().isInterrupted()) { log.info( "守护线程处理任务..." ); break ; } } log.info( "守护线程处理任务结束..." ); }; Thread t1 = new Thread(runnable, "t1" ); // 将线程设置为守护线程,默认为 false(非守护线程) //t1.setDaemon(true); t1.start(); log.info( "main start..." ); Thread.sleep( 5 * 1000 ); log.info( "main end..." ); } } |
运行结果:所有的线程默认都是非守护线程,main 线程运行完毕之后,t1 线程还没有结束,一直在执行 while(true) 循环
示例二
将 t1 线程设置为守护线程,5 s 休眠时间结束后,守护线程也随着 main 线程的停止而终止了
1 2 | // 在 start 方法调用之前设置 t1.setDaemon( true ); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2021-02-22 IDM 重置序列号