在java Thread中中断外部方法调用

我的java程序使用外部方法(我没有源代码)需要一段时间才能完成,所以我在Thread类中调用了该方法(在其run方法中)。 现在问题是如果用户想要退出程序,我如何立即停止线程(不等待方法结束)。

当我调用Thread的中断方法时,没有任何反应,在外部方法完成之前没有中断的exception。 我以为可能会发生中断的exception,并且在外部方法运行的同时被捕获但可能没有?

我不确定Threads如何正常工作。 那你怎么解决这个问题呢?

如果它不检查线程的中断位或提供其他一些取消机制,那么你可以做很多事情来阻止其他方法的进展。 基本上,一个线程(即在其上运行的方法)需要与其他线程协作才能被中断。

但是,只要所有非守护程序线程完成,程序就会结束。 因此,如果您不希望其他线程阻止退出进度,那么您需要做的就是在start()线程之前调用thread.setDaemon(true) 。 然后你的守护程序线程(包括main运行的那个)可以完成他们需要做的任何清理,你的程序将退出而不等待该守护程序线程完成。

编辑:这个答案最初谈到使用Future s,错过了OP的观点,这是针对程序退出的特殊情况。 如果您想阅读有关Future的内容,请参阅此答案的历史记录。