Thread.stop()的Java Docs让你觉得如果你调用Thread.stop(),世界就会结束。
已过时即可。这种方法本质上是不安全的。使用停止线程 Thread.stop使它解锁已锁定的所有监视器 (作为未经检查的ThreadDeath异常的自然结果 传播堆栈)。如果以前受保护的任何物体 由这些监视器处于不一致状态,受损物体 对其他线程可见,可能导致任意 行为。 stop的许多用法应该简单地用代码替换 修改某个变量以指示目标线程应该停止 运行。目标线程应定期检查此变量,并且 如果变量,则以有序的方式从其run方法返回 表示它将停止运行。如果目标线程等待 长期(例如,在条件变量上),中断 应该使用方法来中断等待。有关更多信息,请参阅 为什么Thread.stop,Thread.suspend和Thread.resume已弃用?。
例如,如果我在第三方运行方法,关闭源库并且我需要保证它在5分钟或更短时间内结束,还有其他方法吗?使用Thread.stop()的现实后果是什么?如何判断它们是否发生?
答案 0 :(得分:4)
在任何情况下都不应使用Thread.stop()
。
如果您认为需要致电Thread.stop()
,请不要!这将是错误的。
Thread.stop()
。
请不要致电Thread.stop()
- 即使您受到死亡威胁。
我将这个答案捐赠给community wiki
请 - 其他人 - 和我一起通过编辑这个答案并添加你的祈祷而不是致命的Thread.stop()
来劝告那些异教徒因犯罪Thread.stop()
而犯罪。 }。
如果你真的希望在5分钟后杀死一个进程 - 请使用Process destroyed。这将保护主JVM免受使用Thread.stop()
终止线程时可能发生的任何潜在损坏。但是,如果子Process
位于I / O中间,则可能会使文件处于损坏状态。防范这种情况的一种方法是使Process
数据库的客户端可以回滚正在进行的事务。
一般来说,安全地终止某些不合作的和是非常非常困难的。