java - 使用 Thread.stop(Throwable) 强制将运行时异常抛出到线程中是否存在危险?

标签 java multithreading exception

我正在编写一个相当大的多线程应用程序,线程具有许多不同的角色(例如事件处理、指标、网络)。目前,如果存在无法处理的不一致,则会表现为异常。由于确实无法从其中一些错误中恢复,因此我一直将其作为 ApplicationDeathException 类型的运行时异常重新抛出。

任何需要处理关闭的类都会从该异常的 catch block 中调用它,然后重新抛出它以使其在堆栈中向上传播。

我正在考虑以相同的方式通过调用 Thread#stop(Throwable) 来终止所有其他线程。大多数都可以处理突然终止,并且可以在需要关闭逻辑时捕获此异常。他们只会让异常在堆栈中传播,在需要的地方执行关闭逻辑,并最终杀死线程。这种方法是否存在我遗漏的任何隐患?

最佳答案

Thread.stop 已被弃用,因为它不安全(请参阅 Javadoc)。相反,让每个线程监视某种 boolean 标志(请参阅 Java: How to stop thread? 以及 SO 上可能无数的其他线程)。

在这种情况下,我通常会实现某种线程池管理器,负责彻底关闭正在运行的线程。然后,当发生非常糟糕的事情时,您只需通知经理将其关闭即可。

关于java - 使用 Thread.stop(Throwable) 强制将运行时异常抛出到线程中是否存在危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23175316/

相关文章:

java - mediaplayer.isPlaying 始终为 false

java - 带有 session 对象的 Spring Junit - 在 Controller 中不可见

python - 由于 GIL,多线程 Python 代码中是否不需要锁?

javascript - Firebase - 禁用 'offline' 模式并使 'update()' 抛出网络异常?

java - 在 Java 8 流中,如何过滤掉不是 Enum 有效值的字符串?

java - 使异常默认执行某些操作

java - 为什么无效的 compareTo 不会导致 Collections.sort 崩溃?

java - 为什么当主 Activity 繁忙时我的 Surface View 类会停止渲染?

multithreading - 中断并行流执行

c# - 什么是 http 500 响应的 Thrift 等价物?