java两阶段终止线程怎么实现
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要讲解了"java两阶段终止线程怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java两阶段终止线程怎么实现"吧!一、怎么优雅地关闭
千家信息网最后更新 2025年11月08日java两阶段终止线程怎么实现一、怎么优雅地关闭一个线程?
1.错误做法
2.正确做法
这篇文章主要讲解了"java两阶段终止线程怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java两阶段终止线程怎么实现"吧!
一、怎么优雅地关闭一个线程?
在一个线程T1中如何优雅地关闭线程T2(也就是说要给T2一个机会释放持有的资源)?
1.错误做法
使用stop()方法停止线程:
stop()方法会真正杀死线程,如果此时该线程持有锁,那么其他线程将永远无法获取锁。
使用System.exit()方法停止线程:
会让整个进程都退出
2.正确做法
思路:

代码实现:
public class Test { public static void main(String[] args) throws InterruptedException { TwoPhaseTermination twoPhaseTermination = new TwoPhaseTermination(); twoPhaseTermination.start(); Thread.sleep(3000); twoPhaseTermination.stop(); }}class TwoPhaseTermination{ // 监控线程 private Thread monitorThread; public void start(){ monitorThread = new Thread(()->{ Thread current = Thread.currentThread(); while(true){ if(current.isInterrupted()){ System.out.println("线程要关闭了..."); break; } try { Thread.sleep(1000); // 阶段1 System.out.println("监控线程正在工作...."); // 阶段2 // 如果在阶段2被打断,线程的isInterrupted标志位为true,会捕抓到信号并关闭线程 // 如果在阶段1被打断,会进入catch语句块,并且isInterrupted标志位清空,无法关闭线程 } catch (InterruptedException e) { e.printStackTrace(); // 需要重新设置isInterrupted标志位为true monitorThread.interrupt(); } } }); // 启动线程 monitorThread.start(); } public void stop(){ // 设置isInterrupted标志位true monitorThread.interrupt(); }}运行结果:
两阶段关闭线程:
二、要点
为什么需要在catch代码块中重新执行monitorThread.interrupt()?因为Thread.sleep()执行过程中被打断,isInterrupted标志位会清空,下一次进入while循环就会忽略这次打断,继续运行线程。
演示一下把monitorThread.interrupt()注释掉的结果:

可以看到,会忽略这次的isInterrupted信号,继续运行线程。
感谢各位的阅读,以上就是"java两阶段终止线程怎么实现"的内容了,经过本文的学习后,相信大家对java两阶段终止线程怎么实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
线程
阶段
标志
方法
学习
运行
优雅
代码
信号
做法
内容
思路
结果
监控
也就是
也就是说
就是
情况
文章
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器上怎么添加无线网卡
服务器异常登录不上
华力创通和网络安全
甲骨文数据库排名
网络安全检查湖南
nodejs服务器调优
注塑机服务器报警异常故障排除
软件开发项目后期维护协议
烟台云帆网络技术
vfp数据库应用技术答案
网络安全态势感知的难点
mac软件开发怎么样
摄像头服务器怎么看电源
数据库技术与应用实验3
服务器如何防护中间人攻击
软件开发app模型
奉贤区多功能软件开发服务有哪些
自媒体专业是不是软件开发
幼儿园网络安全知识教育文案
数据库自动备份是自动覆盖吗
在服务器上找不到目录路径
数据库系统创新
营地怎么转服务器
噗嗤网络技术
手机版最牛服务器
python软件开发工资
六安vr软件开发
网络安全形势2021
会计人员用数据库干什么
原神怎么从小米服务器转到官服