java – Thread.stop(),最后是[复制]
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Thread.stop(),最后是[复制],小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1869字,纯文字阅读大概需要3分钟。
内容图文
![java – Thread.stop(),最后是[复制]](/upload/InfoBanner/zyjiaocheng/787/2824d0f7ec8340ce9f77d3a098fc1901.jpg)
参见英文答案 > Are Thread.stop and friends ever safe in Java? 8个
我创建了一个名为ThreadClass的跟随类(你可以看到它是一个线程),它的结构类似于以下内容
class SomeTask implements Runnable
{
boolean someCondition=true;
public void run() {
try
{
while(someCondition)
{
//Here goes the Process Code
}
}
catch(Exception errorException)
{
//Catching the Exception
}
finally
{
////I expect that this finally should run every time ,whatever happens in the world
}
}
}
我的问题是关于finally块和stop()方法
由于上面的类正在实现Runnable,所以我可以创建这个类的对象并通过调用start()方法启动它的一个线程.我也知道我可以通过使用stop()来停止这个线程(是的,我知道它已被弃用)方法.
我想要澄清的是,如果我需要在ThreadClass的对象上调用stop方法,那么即使通过调用stop()来停止线程,我也可以依赖finally块来执行,因为我正在做一些重要的事情关闭finally块中的东西.
解决方法:
线程#stop通过抛出ThreadDeath异常来工作,它不会像System.exit吹走JVM那样瞬间消除线程. ThreadDeath甚至可以被捕获,尽管这不是一个好主意.所以尝试块仍然相关.
但是,复杂的是,如果线程已经多次调用它,那么,如果在线程处于finally块中时调用第二个停止,那么它可以从finally块中抛出,这样finally块就不会完成然后.如果线程的清理需要一段时间,那么很可能在它上面多次调用stop.
或者即使你只调用stop一次,如果在调用stop时线程恰好已经执行了finally块,那么stop会干扰完成finally块.
这类似于technotes on Thread primitive deprecation指出的:
1) A thread can throw a ThreadDeath exception almost anywhere. All synchronized methods and blocks would have to be studied in great detail, with this in mind.
2) A thread can throw a second ThreadDeath exception while cleaning up from the first (in the catch or finally clause). Cleanup would have to repeated till it succeeded. The code to ensure this would be quite complex.
因此,有些情况存在问题,要确保正确完成清理是非常困难的.詹姆斯的评论是正确的,如果可能的话,你应该使用这种事情的中断,以便线程可以可靠地完成其业务.
内容总结
以上是互联网集市为您收集整理的java – Thread.stop(),最后是[复制]全部内容,希望文章能够帮你解决java – Thread.stop(),最后是[复制]所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。