我需要使用deprecated stop(),因为我需要运行由其他程序员开发的Runnable类,我不能在方法运行中使用while(isRunning == true)。
问题是:使用方法stop()是否足够安全? Theads不适用于任何资源(如文件,数据库或Internet连接)。但我希望确保在使用stop()方法停止十几个线程后,JVM不会被破坏。
P.S。:是的,我可以编写一些代码来测试它,但我希望有人知道答案)
答案 0 :(得分:6)
排序。关于Thread.stop()
没有任何内在的“腐败”。问题是,当执行它们的线程突然停止时,它可以使对象处于损坏状态。如果程序的其余部分对这些对象没有可见性,那就没关系。另一方面,如果其中一些对象对程序的其余部分可见,则可能会遇到难以诊断的问题。
答案 1 :(得分:4)
如果您使用Thread.stop
,假设您的用户很少,您可能会侥幸逃脱。这是非常难以测试的。它可以在执行代码的任何地方导致异常。您无法测试所有可能的情况。在您的设备中,您可能永远不会发现问题;来到下一个JRE更新程序可能会因为一个非常模糊的间歇性错误而失败。
一个示例问题是如果线程当时正在加载一个类。该类无法加载,不会再次重试。你的程序坏了。
答案 2 :(得分:1)
我在问题"Are thread stop and friends ever safe?"中解决了这个问题,在其中一个答案中,我试图找出使stop()
安全使用的先决条件。但这仍然是“正在进行的工作”。
答案 3 :(得分:0)
JVM不会被破坏,但会仔细阅读javadoc以确保您不会遇到“灾难”的条件。
您需要仔细查看该线程所持有的任何同步监视器。您提到文件和套接字是挂起的资源,但您还需要考虑任何共享数据结构。还要确保您的异常处理不会捕获RuntimeException
(请参阅stop())。