首页 > 编程语言 >关于java.lang.ThreadDeath线程发生场景及模拟代码测试

关于java.lang.ThreadDeath线程发生场景及模拟代码测试

时间:2023-03-19 15:13:00浏览次数:34  
标签:lang java ThreadDeath System 线程 println out

当调用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)

标签:lang,java,ThreadDeath,System,线程,println,out
From: https://www.cnblogs.com/javaxubo/p/17233263.html

相关文章

  • java——Zookeeper学习——zk实现分布式锁了解
                   ......
  • Java基础字符串练习
    ​定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。要求:1、如果传递的参数为空,返回null2、如果传递的数组元素个数为0......
  • 【Java】Allatori代码加密
    一般来说我们在写Java程序时都会使用Maven(或Gradle)做依赖集成。这过程中Maven(或Gradle)作为编译黑盒,输入源码而输出字节码。但我们也知道Java程序是可以通过反编译工具看到源......
  • java——Zookeeper学习——入门学习
    学习之前看了2个B站教程:   1、千峰:https://www.bilibili.com/video/BV1Ph411n7Ep/?vd_source=79bbd5b76bfd74c2ef1501653cee29d6   2、黑马:https://www.bili......
  • Java顺序结构
    选择结构If选择结构if的嵌套语句可以提高读取的效率。如:1~100分成1到50和50到100。查找数字100则在50到100中读取;if括号中的条件在Scanner包中有比较Switch选择结......
  • 每日记录:Caused by: java.lang.NoClassDefFoundError: net/minidev/asm/FieldFilter
    错误详情:Causedby:org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'requestMappingHandlerAdapter'definedinclasspat......
  • java设计模式 之 单例模式
    单例模式单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。对于整个软件系统中,对于某个......
  • 在 Java 中使用集合框架
    一.什么是集合框架集合框架的概述Java中的集合框架是一组用于管理和操作对象集合的类和接口,它们提供了比数组更高级别的数据结构和算法,以及更方便的数据访问和操作方式。Ja......
  • 【Android 逆向】【攻防世界】easyjava
    1.apk安装到手机,提示输入flag2.jadx打开apk看看privatestaticchara(Stringstr,bbVar,aaVar){returnaVar.a(bVar.a(str));}/*JAD......
  • 【JavaScript】49_DOM编程:DOM修改与demo
    10、DOM的修改appendChild()用于给一个节点添加子节点list.appendChild(li)insertAdjacentElement()可以向元素的任意位置添加元素两个参数:1.要添加的位置2.要添加的元素be......