0

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

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

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

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

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

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

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

有什么想法吗?

4

1 回答 1

2

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

于 2012-12-07T10:08:30.417 回答