相关疑难解决方法(0)

在Java中处理InterruptedException

以下处理方式有什么区别InterruptedException?最好的方法是什么?

try{
 //...
} catch(InterruptedException e) { 
   Thread.currentThread().interrupt(); 
}
Run Code Online (Sandbox Code Playgroud)

要么

try{
 //...
} catch(InterruptedException e) {
   throw new RuntimeException(e);
}
Run Code Online (Sandbox Code Playgroud)

编辑:我也想知道这两个使用的场景.

java multithreading exception-handling interrupted-exception

283
推荐指数
6
解决办法
15万
查看次数

可靠地停止无响应的线程

我想知道如何在 Java 中停止一个无响应的线程,这样它就真的死了。

首先,我很清楚Thread.stop()被弃用以及为什么不应该使用它;关于这个主题已经有很多很好的答案,参见。[1] [2]。因此,更准确的问题是,从技术上讲,是否真的有可能杀死一个代码不受我们控制但可能具有敌意且不响应中断的线程。

在最简单的情况下,一个恶意线程正在运行while(true);,但它也可能耗尽内存或其他系统资源来造成更大的破坏。调用interrupt()那个线程显然是无效的。打电话stop()呢?

我已经在调试器中运行了它,事实上,线程真的消失了。但这种方法可靠吗?可以为这种情况准备敌对线程;想想try{run();}catch(ThreadDeath t){run();}它在哪里捕获ThreadDeath我们调用时产生的stop()并再次递归调用自身。

作为外部观察者,我们无法看到正在发生的事情;Thread.stop()总是默默地运行。最糟糕的是,通常的诊断将不再起作用(在 Corretto 1.8.0_275 Windows x64 上调试时试过这个):无论是否成功杀死线程,Thread.getState()总是返回RUNNABLE,同样适用Thread.isAlive()(总是如此)。

java multithreading denial-of-service

7
推荐指数
1
解决办法
236
查看次数