我的Java程序使用外部方法(我没有源代码)需要一段时间才能完成)。现在问题是如果用户要退出程序,我如何立即停止线程(不要等待方法结束)。
当我调用线程的中断方法时,什么都不会发生,在外部方法完成之前没有中断异常。我认为可能会发生中断的例外,并在外部方法运行的同时被捕获,但也许不运行?
我不确定线程如何准确地工作。那么您如何解决这个问题?
,如果没有检查线程的中断位或提供其他一些取消机制,那么您无法做很多事情来停止其他方法的进度。基本上,如果要中断,则需要与其他线程合作。
但是,您的程序将在所有非daemon线程完成后立即结束。因此,如果您不希望其他线程阻止退出的进度,那么您需要做的就是在start()
线程之前调用thread.setDaemon(true)
。然后,您的守护程序线程(包括main
运行的线程)可以完成他们需要进行的任何清理工作,并且您的程序将退出而无需等待该守护程序线程完成。
编辑:此答案最初讨论了使用Future
s,缺少OP的观点,即这是针对程序的特殊情况。如果您想阅读有关Future
s。