关于java.lang.ThreadDeath线程发生场景及模拟代码测试
当调用stop()方法时会发生两件事:
1.即刻停止run()方法中剩余的全部工作,包括在catch或finally语句中,并抛出ThreadDeath异常(通常情况下此异常不需要显示的捕获),因此可能会导致一些清理性的工作的得不到完成,如文件,数据库等的关闭。
2.会立即释放该线程所持有的所有的锁,导致数据得不到同步的处理,出现数据不一致的问题。
package com.java.thread.p4;
public class StopDemo {
public static class MyThread extends Thread{
@Override
public void run() {
try {
System.out.println("线程逻辑开始");
super.run();
for(int i = 0; i < 5000; i ++){
System.out.println(i);
sleep(100);
}
System.out.println("线程逻辑结束");
} catch (InterruptedException e) {
System.out.println("捕获到了 InterruptedException 异常 , 进入了 catch 代码块");
e.printStackTrace();
}catch (ThreadDeath e){
System.out.println("捕获到了 ThreadDeath 异常 , 进入了 catch 代码块");
e.printStackTrace();
}//catch代码块
System.out.println("run 方法结束");
}//run方法
}//线程
public static void main(String[] args) throws InterruptedException {
MyThread thread = new MyThread(); //新建线程
thread.start(); //线程启动
Thread.sleep(500); //沉睡 500ms, 让线程打印 5 个数字
thread.stop(); //中断线程
System.out.println("主线程中断线程");
}
}
控制台输出信息
线程逻辑开始
0
1
2
3
4
捕获到了 ThreadDeath 异常 , 进入了 catch 代码块
主线程中断线程
run 方法结束
java.lang.ThreadDeath
at java.lang.Thread.stop(Thread.java:853)
at com.java.thread.p4.StopDemo.main(StopDemo.java:31)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)