发布
社区首页 >问答首页 >在Java 8中替代Thread.stop()吗?

在Java 8中替代Thread.stop()吗?
EN

Stack Overflow用户
提问于 2014-04-26 22:48:41
回答 4查看 20.5K关注 0票数 25

既然Thread已经被删除了,那么有什么方法可以迫使Thread.stop在Java8下停止呢?这包括强制线程等待锁/同步/睡眠/等待/无限循环停止。

这是应用程序的看门狗的一部分,该应用程序可以检测是否有死锁/冻结,强制终止线程,然后保存当前状态以避免丢失信息--虽然由于强制线程停止而使此信息损坏的可能性很高,但与其丢失可能不正确的信息,不如有一个可能不正确的信息的副本。

试图在不停止锁定线程的情况下保存此信息是不可能的,因为保存它将需要获取锁。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-28 16:14:12

如果您确实需要以艰苦的方式停止Thread,您可能会认为Thread.stop()方法(没有提供任意的Throwable)仍然可以与Java8一起工作。它将在停止的线程上生成一个ThreadDeath,它可以像其他任何Error一样处理,尽管它的名称不寻常。唯一的区别是,如果不捕获ThreadDeath,则不会打印堆栈跟踪。

但请注意,与其他stop方法相比,由于大多数相同的原因,不推荐此方法。它可能会在Java的下一个版本中不被传播。所以现在还是该考虑B计划…了

票数 8
EN

Stack Overflow用户

发布于 2014-04-26 22:56:26

阅读这些文章,他们会解释:

  1. “为什么Thread.stop,Thread.suspend,Thread.resume和Runtime.runFinalizersOnExit不受欢迎?”http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html
  2. 约书亚·布洛赫:“有效的Java (第2版)”,第66项:同步访问共享的可变数据

约书亚·布洛赫解释了如何停止线程,并说:

考虑从另一个线程停止线程的任务。库提供了Thread.stop方法,但是这个方法早在很久以前就被废弃了,因为它本身是不安全的--它的使用可能导致数据损坏。不要使用Thread.stop。阻止一个线程从另一个线程进入另一个线程的推荐方法是让第一个线程轮询一个布尔字段,该字段最初为false,但第二个线程可以将其设置为true,以指示第一个线程将停止自身。

在使用此技术时,还应该处理布尔字段的同步。我不想从乔舒亚·布洛赫的书中复制太多的东西,但是你会在上面提到的官方Oracle Java文档中找到所有的东西。

票数 11
EN

Stack Overflow用户

发布于 2014-04-26 22:50:15

停止线程的正确方法是调用线程上的interrupt

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23317332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档