在java中杀死一个无限循环线程

时间:2013-08-03 14:46:18

标签: java multithreading infinite-loop

有没有办法可以在不使用弃用的stop()的情况下停止线程?

该线程从一个可能写得很糟糕的类中调用一些方法,这些类可能包含无限循环。由于我无法修改此类,因此无法控制循环条件,因此无法使用interrupt()或任何其他变量正常退出。在这种情况下使用stop()?

是否合理

2 个答案:

答案 0 :(得分:1)

如果你不能使用stop()并且无法修复代码,那么你唯一的另一个选择就是在另一个进程中运行代码并终止进程。

在您的情况下,最简单的选择是使用Thread.stop()

答案 1 :(得分:0)

stop()方法的问题在于它可以使同步对象处于不一致状态(即如果在同步对象更新中途停止线程,则只有部分对象可能是更新)。如果你的线程没有使用任何同步的方法/块,那么stop它是安全的。

如果你的线程可能正在使用同步的块/方法,那么在调用stop之前尝试干净地关闭它,例如在它上面调用interrupt,然后在X分钟后调用stop如果线程仍未停止(假设线程正在调用一个损坏的方法)。只需确保线程在调用可能损坏的方法之前将所有内容保持在一致状态。