如果我确实需要,我可以在Java中使用thread.stop()吗?

时间:2009-09-02 21:19:35

标签: java multithreading

我需要使用deprecated stop(),因为我需要运行由其他程序员开发的Runnable类,我不能在方法运行中使用while(isRunning == true)。

问题是:使用方法stop()是否足够安全? Theads不适用于任何资源(如文件,数据库或Internet连接)。但我希望确保在使用stop()方法停止十几个线程后,JVM不会被破坏。

P.S。:是的,我可以编写一些代码来测试它,但我希望有人知道答案)

4 个答案:

答案 0 :(得分:6)

排序。关于Thread.stop()没有任何内在的“腐败”。问题是,当执行它们的线程突然停止时,它可以使对象处于损坏状态。如果程序的其余部分对这些对象没有可见性,那就没关系。另一方面,如果其中一些对象对程序的其余部分可见,则可能会遇到难以诊断的问题。

答案 1 :(得分:4)

如果您使用Thread.stop,假设您的用户很少,您可能会侥幸逃脱。这是非常难以测试的。它可以在执行代码的任何地方导致异常。您无法测试所有可能的情况。在您的设备中,您可能永远不会发现问题;来到下一个JRE更新程序可能会因为一个非常模糊的间歇性错误而失败。

一个示例问题是如果线程当时正在加载一个类。该类无法加载,不会再次重试。你的程序坏了。

答案 2 :(得分:1)

我在问题"Are thread stop and friends ever safe?"中解决了这个问题,在其中一个答案中,我试图找出使stop()安全使用的先决条件。但这仍然是“正在进行的工作”。

BTW:编写测试代码不一定有帮助。 (测试只能证明错误的存在而不是没有错误。)你会更好地试图解决问题,IMO。但这并不容易: - )。

答案 3 :(得分:0)

JVM不会被破坏,但会仔细阅读javadoc以确保您不会遇到“灾难”的条件。

您需要仔细查看该线程所持有的任何同步监视器。您提到文件和套接字是挂起的资源,但您还需要考虑任何共享数据结构。还要确保您的异常处理不会捕获RuntimeException(请参阅stop())。