关于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)
posted @ 2023-03-19 15:02  哩个啷个波  阅读(100)  评论(0编辑  收藏  举报