有没有办法立即停止线程?

时间:2013-04-12 20:05:04

标签: java

我想知道Java中是否有某种方法可以立即停止线程。我不想检查它的中断状态,我需要立即停止它。那是因为在线程的运行方法中有很多计算并且要实现我想要的中断,我将不得不在任何地方注入状态检查。那么有没有办法立即中断线程?也许stop()方法?我知道它是不应该因为死锁而被使用但是如果它可以解决我的问题(即使它会导致另一个;))我可以使用它。所以? PS 我知道还有其他相似的问题,但是到处都有人提出类似的问题来打断(),这不适合我。

2 个答案:

答案 0 :(得分:2)

The question/answer that @Alya'aGamal points to是正确的。

如果您的应用程序的设计假设强行停止线程,进程或程序(如使用kill -9或通过Windows上的任务管理器停止它)是一件好事,那么您真的需要证明这一点,因为这听起来像是一个糟糕的设计选择。如果你使用别人的应用程序并且根据需要关闭它的唯一方法是强行阻止它,你不觉得这是一个相当大的缺陷吗?

如果您有长时间运行的循环或算法,并且能够在任意点停止它们很重要,那么您必须进行某种常规状态或信号检查以便执行这很好。

始终设计你的应用程序,以便有一种漂亮,友好,优雅的方式让他们退出除你控制之外的所有情况(例如,另一个应用程序开始使CPU饱和,硬盘死机,RAM芯片变得油炸,流星撞击地球等等。)

答案 1 :(得分:1)

正如其他人所说,杀死一个线程并不是一个好主意,这就是为什么stop()方法已被弃用的原因。以这种方式引入死锁太容易了。还有其他原因可以解释为什么外部停止线程很糟糕,但我不会在这里讨论它们。

状态检查确实是唯一的其他方法,但我可以理解你为什么要避免它们。如果你的run()方法有很多代码行,那么检查会增加开销并使代码变得麻烦......但是没有其他线程安全的方法来阻止线程。

那就是说 - 死锁有四个组成部分:互斥,保持和等待,非抢占和循环等待。如果您可以保证在run()方法中永远不会遇到这些条件中的任何一个,那么通过调用stop()永远不会遇到死锁。