繁体   English   中英

Thread.stop()和最后[重复]

Thread.stop() and finally [duplicate]

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

这个问题在这里已有答案:

我创建了一个名为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块中的东西。

1 个回复

线程#stop通过抛出ThreadDeath异常来工作,它不会像System.exit吹走JVM那样瞬间消除线程。 ThreadDeath甚至可以被捕获,尽管这不是一个好主意。 所以尝试块仍然相关。

但是,复杂的是,如果线程已经多次调用它,那么,如果在线程处于finally块中时调用第二个停止,那么它可以从finally块中抛出,这样finally块就不会完成然后。 如果线程的清理需要一段时间,那么很可能在它上面多次调用stop。

或者即使你只调用stop一次,如果在调用stop时线程恰好已经执行了finally块,那么stop会干扰完成finally块。

这类似于Thread原语弃用技术说明

1)一个线程几乎可以在任何地方抛出一个ThreadDeath异常。 考虑到这一点,必须非常详细地研究所有同步的方法和块。

2)线程可以在从第一个(在catch或finally子句中)清理时抛出第二个ThreadDeath异常。 清理必须重复,直到成功为止。 确保这一点的代码非常复杂。

因此,有些情况存在问题,要确保正确完成清理是非常困难的。 詹姆斯的评论是正确的,如果可能的话,你应该使用这种事情的中断,以便线程可以可靠地完成其业务。

2 为什么Thread.stop()如此危险

为什么Thread.stop()如此危险? 为什么建议使用Thread.interrupted()代替? 我知道stop被弃用了。 还有什么东西让它不安全? 有什么地方可以使用stop方法吗? 如果是这样给我一个例子。 ...

3 thread.stop()异常

我想当用户打开应用程序播放歌曲时,当歌曲结束时,新的活动将被触发,我放一个跳过按钮,允许用户停止歌曲并转到下一个活动,这是代码 这是跳过按钮的onclick 并且该代码工作正常,我的意思是,如果我点击跳过按钮,歌曲停止并且新活动被推出,但我的问题是即使也是好的,我有一个例外(但应 ...

4 Thread.stop() - 已弃用

为什么Thread.stop()在 Java 中被弃用? 在他们的网站上,我看到以下内容: 为什么不推荐使用Thread.stop ? 因为它本质上是不安全的。 停止线程会使其解锁所有已锁定的监视器。 (当ThreadDeath异常沿堆栈向上传播时,监视器被解锁。)如果以前受这些监视器保 ...

5 如何考虑Java线程? 亦称Thread.stop

博览会: 我认为Java VM很棒。 它保证了字节码,标准库的安全,令人惊叹,尤其是能够动态加载Java类并知道它不会使VM崩溃的能力(使用* .so文件或内核模块)。 我不明白的一件事是Java如何对待Thread.stop 我已经阅读了http://java.sun.co ...

6 Thread.stop 和朋友在 Java 中安全吗?

java.lang.Thread中的stop() 、 suspend()和resume()已被弃用,因为它们是不安全的。 Oracle 推荐的解决方法是使用Thread.interrupt() ,但这种方法并不适用于所有情况。 例如,如果您调用的库方法未显式或隐式检查interrupted标志, ...

7 为什么thread.stop()不起作用?

我刚刚从sun的文档中了解到,当我调用thread.stop()方法时,由于抛出ThreadDeath错误,因此run()方法将终止,并且还释放该线程持有的所有锁,如何证明它? 我尝试了测试程序,如下所示: 仅当我在run()方法中放置一个wait()时,我才能捕获ThreadDe ...

8 我可以在这里制作Thread.stop()吗?

我的程序中有这种类型的搜索功能。 有一种搜索方法需要一些时间才能完成,并且应该在单独的线程上运行,并且当用户键入新字母进行新搜索时,我应该能够杀死它,但是问题是我使用了第三方的trie实现,不会检查中断,我到处都读到使用Thread.stop()会对程序产生不良影响,所以我的问题是使用此代 ...

10 这是Thread.stop()的有效使用吗?

好吧,我知道它很危险,我知道它已被弃用了,而且我知道使用它会让小耶稣哭泣。 我想我已经意识到调用它的含义并且已经阅读了这个相关的问题 。 这是我的情景。 我想测试一个数据处理库。 它运行多个作业,每个线程一个。 每个作业仅通过进程外排队系统与其他作业通信。 否则,作业是独立的:线 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM