这种方法本质上是不安全的。使用thread.stop
停止线程会导致它解锁已锁定的所有监视器(这是未经检查的threaddeath
异常沿堆栈向上传播的自然结果)。如果以前由这些监视器保护的任何对象处于不一致的状态,则损坏的对象将对其他线程可见,从而可能导致任意行为。[...]
甚至有一整篇文章提供了更详细的。(尤其是ThreadDeath
在到达顶部时是静默的,即使您防范它,也无法防范Thread.Stop(Throwable t)
。)
总的来说,我同意这篇文章所担心的问题,并同意StackOverflow相关问题的答案--在世界上几乎所有的用例中,都有一种比stop()
更好的方法。但不是全部。
这里有一个用例,我正在努力为它想出更好的方法。我请你提建议。
我正在使用一个运行在Java之上的交互式控制台,它允许用户以交互式解释的方式运行调用Java的任意Java语句和Python函数。(有关截图,请参阅Jython控制台。)
现在,用户可以编写任意函数。其中一些方法可能会调用Java方法,导致无限循环,打印大量输出,几乎使系统饱和,从而使系统响应变得非常慢。
是的。我知道有些物体可能已经损坏,不能正常工作了。但是我们正在讨论的是挽救任何可能被留在有效状态的东西(这可能是几乎所有的东西,除了一两件东西)。
有没有人觉得这个推理有什么问题?如果这是一个有效的用例,那么这是否意味着该方法不应该被弃用:)?
调用thread.stop()
是个坏主意。故事结束了。
它可能在实践中起作用,但您在此过程中牺牲了JVM的大部分并发性保证。您的整个程序本质上运行的是未定义的行为。可能损坏的不仅仅是线程或线程中的数据,而是当线程被杀死时恰好处于易受攻击状态的JVM的任何部分。
这听起来像是您在寻找一个人来确认您的用例以某种方式避免了JVM的风险。它不是,所以你不太可能得到这样的确认。如果你没有看到问题对你更大的力量,但当它以莫名其妙或危险的方式失败时,不要感到惊讶。
问题内容: 我已经看到了许多在API上使用注释以将其标记为“需要尽快替换”的示例。 但是,在几乎所有这些情况下,代码开发人员不仅继续使用已弃用的API,而且还抑制了弃用警告。 似乎API开发人员的最佳意图最终是创建更多与已实现的业务逻辑无关的代码- 如果不赞成使用API,但在抑制相关警告的情况下继续使用它,则似乎充其量只是代码的降级,并且在IMHO最差的情况下替换不推荐使用的库时,可能会导致应
问题内容: 我收到此警告,但是该程序仍然可以正常运行。 MySQL代码向我显示了一条PHP消息: 不推荐使用:mysql_connect():不推荐使用mysql扩展,以后将被删除:在第2行的C:\ xampp \ htdocs \ task \ media \ new \ connect.inc.php中使用mysqli或PDO代替 我的页面是 这是什么意思,我该如何消除该消息? 问题答案: 有
问题内容: 我正在尝试使用和进行单元测试。 当我不包含注释时,测试将失败。但 不推荐使用MockitoJUnitRunner类型 我正在使用Mockito 2.6.9。我应该怎么做? 问题答案: 现在确实已弃用,应该改为使用。如您所见,仅软件包名称已更改,该类的简单名称仍为 。 摘录自javadoc : 移至,该课程将在Mockito 3中删除
新的侦听器(又名OnCameraMoveListener())方法onCameraMove()没有CameraPosition CameraPosition输入变量,所以我很迷惑:有没有方法回收我的旧代码? 这里有一些参考资料。
我收到这个警告,但程序仍然正常运行。 MySQL代码用PHP向我显示了一条消息: 不推荐使用:mysql_connect():不推荐使用mysql扩展,以后将删除该扩展:在C:\xampp\htdocs\task\media\new\connect.inc.php第2行使用mysqli或PDO 我的页是 这意味着什么,我如何消除消息?