java线程基础巩固---Daemon线程的创建以及使用场景分析
2024-09-05 10:51:27
daemon线程既守护线程,而在jdk中对于Thread中针对守护线程有专门的API,如下:
而之前在公司项目中就看到过有人使用过Thread中的这个API,但是对于它的使用场景完全不知,所以这次好好的学习一下,下面直接上代码来阐述它。
编译运行:
很简单,但是这里可以看到在main函数执行完成之后【关于main函数是否真的退出可以用jconsole去查看一下既可,之前也已经查看过】,咱们新创建的Thread-0线程并未退出,这时由于咱们的Thread-0线程还是属于活跃状态,并未执行完,那接下来给我们的线程设置一个daemon属性再看结果,如下:
编译运行:
可见这时当main线程一结束,其我们的线程也退出了。这也是使用守护之后的一个直观效果,而实用价值其实也是蛮大的,这时可以联想到一个实际要使用daemon线程的场景:客户端与服务器端建立一个TCP的长链接,然后当连接建立之后就创建一个线程来给服务器发送心跳包以便服务器能监听客户端的网络状态,这时如果连接断开了那这个心跳线程也得跟着断开,下面来模拟一下:
编译运行:
发送t线程一执行完,在里面创建的心跳线程也立马终止了,刚好满足我们的场景需求,而如果不给心跳线程设置成deamon线程再看结果:
很显然当t线程结束之后里面的心跳线程就不会退出了,当然啦不通过给心跳线程设置守护线程也能达到当连接断开之后其心跳线程也退出,自己写逻辑控制既可,但是有了守护线程那这个逻辑我们就可以避免自己写了。
下面再来细读一下jdk对它的描述:
那不信这个邪,来试一下:
编译运行:
这个异常在JDK中也有描述,如下:
最新文章
- ORACLE 物理读 逻辑读 一致性读 当前模式读总结浅析
- AFNetworking到底做了什么
- gulp学习笔记
- ReflectionHelper
- 修改wamp默认网站目录
- C# 窗体
- 如何由jdk的安装版本改成非安装版本
- 浅谈Android序列化
- sae-v2ex 一个运行在SAE上的类似v2ex的轻型python论坛 - 技术讨论 - 云计算开发者社区 - Powered by Discuz!
- Oracle之PLSQL总结
- C# SQL文件执行器的功能实现
- Structured Streaming + Kafka 集成中遇到的问题
- graph_base_pic_segmentation里面的细节和代码
- P1514 引水入城 DFS
- Real Time Rendering 2
- python3之SQLAlchemy
- hdu 1226
- Latex 初学者入门(四)-- 多个作者共享同一个地址
- 关于 android 环信无法正确获取昵称的问题
- Kafak Confluent
热门文章
- Linux安装sdkman
- kubeadm安装集群系列-2.Master高可用
- 【并行计算-CUDA开发】CUDA线程、线程块、线程束、流多处理器、流处理器、网格概念的深入理解
- 论文阅读 | Robust Neural Machine Translation with Doubly Adversarial Inputs
- OpenResty + Lua访问Redis,实现高并发访问时的毫秒级响应打回
- POJ3450最长公共子串【kmp】
- 在docker容器下安装airflow
- LEN()和DATALENGTH()的区别
- python-day7(正式学习)
- SDL2 程序 编译 错误 及 解决方案