我的程序中有一个特定的功能,我想在按下一个键时停止。我为此目的设置了一个本机键盘挂钩。现在,当检测到该键时,我调用 System.exit(0)。但是,我不想退出程序,只需停止该操作并返回调用它的位置即可。下面给出一个例子。
public class Main {
public static void main(String[] args) {
System.out.println("Calling function that can be stopped with CTRL+C");
foo(); // Should return when CTRL+C is pressed
System.out.println("Function has returned");
}
}
我已经尝试将 foo() 的调用放在一个线程中,以便我可以调用Thread.interrupt()
,但我希望函数调用是阻塞的,而不是非阻塞的。还有阻塞的 IO 调用,foo()
所以除非有必要,否则我宁愿不处理中断,因为我必须处理ClosedByInterruptException
异常并且这之前已经引起了问题。
此外,它的主体foo()
很长,里面有很多函数调用,所以if (stop == true) return;
不能在函数中编写。
有没有比制作阻塞线程更好的方法来做到这一点?如果是这样,怎么做?如果没有,我将如何制作阻塞线程?