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