既然Thread
已经被删除了,那么有什么方法可以迫使Thread.stop
在Java8下停止呢?这包括强制线程等待锁/同步/睡眠/等待/无限循环停止。
这是应用程序的看门狗的一部分,该应用程序可以检测是否有死锁/冻结,强制终止线程,然后保存当前状态以避免丢失信息--虽然由于强制线程停止而使此信息损坏的可能性很高,但与其丢失可能不正确的信息,不如有一个可能不正确的信息的副本。
试图在不停止锁定线程的情况下保存此信息是不可能的,因为保存它将需要获取锁。
发布于 2014-04-28 08:14:12
如果您确实需要以艰苦的方式停止Thread
,您可能会认为Thread.stop()
方法(没有提供任意的Throwable
)仍然可以与Java8一起工作。它将在停止的线程上生成一个ThreadDeath
,它可以像其他任何Error
一样处理,尽管它的名称不寻常。唯一的区别是,如果不捕获ThreadDeath
,则不会打印堆栈跟踪。
但请注意,与其他stop
方法相比,由于大多数相同的原因,不推荐此方法。它可能会在Java的下一个版本中不被传播。所以现在还是该考虑B计划…了
发布于 2014-04-26 14:56:26
阅读这些文章,他们会解释:
约书亚·布洛赫解释了如何停止线程,并说:
考虑从另一个线程停止线程的任务。库提供了Thread.stop方法,但是这个方法早在很久以前就被废弃了,因为它本身是不安全的--它的使用可能导致数据损坏。不要使用Thread.stop。阻止一个线程从另一个线程进入另一个线程的推荐方法是让第一个线程轮询一个布尔字段,该字段最初为false,但第二个线程可以将其设置为true,以指示第一个线程将停止自身。
在使用此技术时,还应该处理布尔字段的同步。我不想从乔舒亚·布洛赫的书中复制太多的东西,但是你会在上面提到的官方Oracle Java文档中找到所有的东西。
发布于 2014-04-26 14:50:15
停止线程的正确方法是调用线程上的interrupt
。
https://stackoverflow.com/questions/23317332
复制相似问题