我有一个无限运行的多线程控制台应用程序。现在我使用ctrl-c来结束它,但有时它会导致finally block 不被调用,并留下一些原始程序开始运行的进程,即使在主java程序结束后。
我在 Stackoverflow 上找到了这个答案
https://stackoverflow.com/a/3194586/492015
class MyThread extends Thread
{
volatile boolean finished = false;
public void stopMe()
{
finished = true;
}
public void run()
{
while (!finished)
{
//do dirty work
}
}
}
但是由于我的程序是基于控制台的,这将如何应用?我需要让程序等待键盘输入吗?因此,如果我按“q”,例如 stopMe() 就会被调用。我该怎么做?
最佳答案
如果你想执行清理,你可以注册一个关闭钩子(Hook):
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
// do the cleanup
}
});
根据我的经验,它总是在按下 Ctrl+C 时执行。
关于java - 优雅地结束基于控制台的多线程程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33031878/