无法干净地停止我的线程

时间:2012-12-07 10:06:00

标签: java multithreading

我创建了一个扩展Thread的类。

这个类定义了几个方法,其中一些使用Process和IO流来下载文件(有时需要几分钟)。

我还有一个用于停止线程的JButton,它有一个ActionListener,它当前执行ClassName.this.stop();这很有效。

在'public void run()'方法中,我执行其中一些方法并启动线程。

我的问题是,如何用interrupt()替换我已弃用的​​Thread.stop()方法,并用它来干净地停止线程?

我已经看了一些解决方案,建议使用布尔标志来检查线程是否已被中断,但是看到run()方法只是执行一系列方法,循环不会评估,直到所有方法都有完成执行,即便如此,我得到一个'InterrupedException',然后循环重新开始。

另一个问题是,如果正在进行下载,则下载完成可能需要几分钟,下次检查是否已经中断线程。我希望一切都能停止,并且对象“删除自身及其中的所有内容”,这正是Thread.stop()目前正确执行的操作。

任何想法?

1 个答案:

答案 0 :(得分:2)

不要使用额外的布尔哨兵标志,完全依赖中断机制。在长期运行的任务中,不花时间在可中断的阻塞方法中;如果Thread.interrupted(),您必须手动编码true的偶然检查并退出任务。如果您的循环在InterruptedException之后继续,则修复此行为。这方面完全掌握在您手中。不要忽视异常;通过削减工作和结束方法来做出反应。