0

我想知道Java中是否有某种方法可以立即停止线程。我不想检查它的中断状态,我需要立即停止它。那是因为在线程的 run 方法中有很多计算,为了实现我想要使用的中断,我必须在任何地方注入状态检查。那么有什么方法可以立即中断线程吗?也许 stop() 方法?我知道据说它不应该因为死锁而使用,但如果它可以解决我的问题(即使它会导致另一个问题;))我可以使用它。所以?PS我知道还有其他类似的问题,但是到处有人向不适合我的interrupted()提出类似的问题。

4

2 回答 2

2

@Alya'aGamal 指出的问题/答案是正确的。

如果您的应用程序的设计假设强制停止线程、进程或程序(例如kill -9通过 Windows 上的任务管理器使用或停止它)是可以做的,那么您确实需要证明这一点,因为这听起来像一个糟糕的设计选择。如果你使用了别人的应用程序,并且按需关闭它的唯一方法是强行停止它,你不认为这是一个相当大的缺陷吗?

如果您有长时间运行的循环或算法,并且能够在任意点停止它们很重要,那么您必须设置某种常规状态或信号检查才能正确执行此操作。

始终以一种很好、友好、优雅的方式设计您的应用程序,使它们能够从您无法控制的事情之外的所有情况中退出(例如,另一个应用程序开始使 CPU 饱和,硬盘死机,RAM 芯片被炸毁) ,流星撞击地球等)

于 2013-04-12T20:22:00.437 回答
1

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

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

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

于 2013-04-12T20:23:45.130 回答