`
littcai
  • 浏览: 248034 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

截获Thread.stop引起的ThreadDeath异常

阅读更多
/**
 * 截获Thread.stop引起的ThreadDeath异常。<br>
 * 我们理论上可以处理引起的stop异常信息。<br>
 * 但是,异常可以发生在线程运行的任意一个点<br>
 * 所有的同步方法和代码块都需要进行仔细的处理。<br>
 * 而且线程在处理第一个ThreadDeath的时候可能再次发生ThradDeath<br>
 * 所以清理工作必须一直做到成为为止,相关的处理代码将是异常的复杂。
 * 
 * @author 老紫竹 JAVA世纪网(java2000.net)
 * 
 */
public class ThreadStopTestCatch {
  private static Object lock = new Object();
  private static int number = 0;
  private static String name = "Name0";

  public static void main(String[] args) {
    ThreadStop t = new ThreadStop();
    t.start();
    ThreadRun t2 = new ThreadRun();
    t2.start();
    t.stop();
    // t.stop();
  }

  static class ThreadRun extends Thread {
    public void run() {
      synchronized (lock) {
        try {
          Thread.sleep(100);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
        System.out.println("number=" + number);
        System.out.println("name=" + name);
      }
    }
  }

  static class ThreadStop extends Thread {
    public void run() {

      synchronized (lock) {
        try {
          number++;
          try {
            Thread.sleep(50);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
          name = "Name" + number;
        } catch (ThreadDeath td) {
          number = 1;
          // 假设线程stop的清理程序也需要一点时间才能完成。
          try {
            Thread.sleep(10);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
          name = "Name" + number;
          td.printStackTrace();
        }
      }

    }
  }
}

 

分享到:
评论

相关推荐

    为什么不鼓励使用 Thread.stop?

    其次,`Thread.stop` 可能触发 `ThreadDeath` 异常,这个异常是受检查的,但通常不会被捕获或处理。如果线程中存在未捕获的异常处理器,`Thread.stop` 的行为可能是不可预测的,可能会导致程序崩溃或者产生其他未...

    java 异常种类总结【转】.docx

    java.lang.ThreadDeath 是一种线程结束,指的是在程序中调用 Thread 类的 stop 方法时抛出的异常。 30. java.lang.UnknownError 未知错误 java.lang.UnknownError 是一种未知错误,指的是在程序中 Java 虚拟机发生...

    Java常见异常大全.pdf

    这些异常通常属于JVM层面的异常,或者是由程序逻辑错误和资源限制等因素引起的。 了解和掌握这些异常,对于编写健壮的Java程序至关重要。开发人员需要根据异常的类型和上下文信息来合理处理这些异常,或者通过抛出...

    JAVA异常大全

    29. **ThreadDeath** - 表示线程结束,通常由`Thread.stop()`方法触发。 30. **UnknownError** - 表示未知严重错误,通常涉及JVM的问题。 31. **UnsatisfiedLinkError** - 未找到本地方法定义时抛出。 32. **...

    java异常汇总.txt

    这通常发生在调用`Thread.stop()`方法时,但由于该方法已被废弃,现在很少见。 #### 30. UnknownError - 未知错误 当Java虚拟机遇到未知的内部错误时,会抛出`UnknownError`。这是一种非常严重的错误,可能需要...

    java所有运行时异常以及错误.

    26. **线程结束:ThreadDeath** - 调用`Thread.stop()`方法时,表示线程结束。 27. **未知错误:UnknownError** - 表示Java虚拟机遇到了未知严重错误。 28. **未满足的链接错误:UnsatisfiedLinkError** - 未能找到...

    Java异常处理.pdf

    Java异常处理是Java编程中不可或缺的部分,用于处理程序运行时可能出现的错误和异常情况。异常在Java中被视为程序运行的不正常状态,可以是错误或者是特定的运行时问题。异常和错误之间的区别在于,异常是程序可以...

    Java中常见的异常分析

    29. **线程结束:ThreadDeath** - 调用`Thread.stop()`方法时,表示线程应该终止。 30. **未知错误:UnknownError** - 表示Java虚拟机遇到了未知的严重错误。 31. **未满足的链接错误:UnsatisfiedLinkError** - ...

    总结了java容易出错的信息 以及错误信息类型

    29. **ThreadDeath** - 用于表示线程结束,通常由`Thread.stop()`方法触发。 30. **UnknownError** - 表示Java虚拟机遇到未知严重错误。 31. **UnsatisfiedLinkError** - 未能找到声明为native方法的本地库定义。 ...

    Java异常处理Java异常处理.doc

    Java异常处理是编程中至关重要的一个部分,它用于管理和恢复程序执行过程中可能出现的错误或异常情况。当程序遇到无法预见的问题,如文件未找到、网络连接中断或计算溢出等,Java通过异常处理机制来优雅地处理这些...

    Java开发过程中常见异常

    29. **线程结束:ThreadDeath** - 通过`Thread.stop()`方法结束线程时抛出的异常。 30. **未知错误:UnknownError** - 表示Java虚拟机遇到了未知的严重错误。 31. **未满足的链接错误:UnsatisfiedLinkError** - ...

    JAVA异常详解.doc

    Java异常处理是编程中至关重要的一个部分,它用于处理程序运行时出现的错误和异常情况。Java异常体系是基于面向对象的设计,使得错误处理更加结构化和可维护。以下是Java异常的一些主要类别和相关知识点: 1. **...

    java中throws的使用问题.pdf

    Java中的异常处理是一个关键特性,它使得程序更加健壮,能够优雅地处理错误情况,而不是因为意外状况导致程序崩溃。异常处理主要涉及五个关键字:`try`、`catch`、`throw`、`throws`和`finally`。 1. `try`块用于...

    Java异常处理及应用.docx

    这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。 非运行时异常是 RuntimeException 以外的异常,类型上都属于 Exception 类及其子类。从程序语法角度讲是必须进行处理的异常,...

    java异常框架处理.pdf

    通过`getCause()`方法可以获取异常的“原因”,也就是引起当前异常的上一个异常对象。 Java异常框架还提供了一种通过继承`Exception`类来创建自定义异常类的能力。例如`DAOException`就是继承自`RuntimeException`...

    java异常总结.pdf

    `ThreadDeath`线程结束异常,当调用`Thread.stop()`时抛出。 `UnknownError`表示Java虚拟机遇到了未知严重错误。 `UnsatisfiedLinkError`在找不到本地方法的实现时抛出。 `UnsupportedClassVersionError`当Java...

    Java常见异常.pdf

    Java异常处理是编程中至关重要的一个部分,它帮助开发者识别并处理程序运行时可能出现的问题。在Java中,异常被组织成一个层次结构,根类是`Throwable`,它有两个主要的子类:`Error`和`Exception`。`Error`通常用于...

    java异常处理

    ### Java异常处理详解 #### 异常的概念 异常在Java编程语言中指的是程序运行过程中遇到的非预期事件或状态,这些事件可能导致程序无法按照既定流程执行。异常并不等同于错误,它更多地指向那些虽然意外却可以预见并...

    java异常集合

    - **ThreadDeath**:当调用Thread类的stop方法时抛出该错误,用于指示线程结束。 - **UnknownError**:用于指示Java虚拟机发生了未知严重错误的情况。 - **UnsatisfiedLinkError**:当Java虚拟机未找到某个类的声明...

    JCVM异常处理机制

    另外,虽然`Throwable`类的直接子类不包括`Error`,但JCVM必须支持所有Java平台中的`Error`类(除了`ThreadDeath`,因为Java卡平台仅支持单线程环境)。 #### 二、异常处理表结构分析 在JCVM规范中,由于智能卡...

Global site tag (gtag.js) - Google Analytics