我有一个无休止地运行的多线程控制台应用程序。现在我使用ctrl-c来结束它,但有时它会导致finally块不被调用,并留下一些进程,即使在主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()。我该怎么做?
答案 0 :(得分:1)
如果要执行清理,可以注册关闭钩子:
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
// do the cleanup
}
});
根据我的经验,当按下Ctrl + C时,它总是被执行。
答案 1 :(得分:0)
如果要清理,可能需要考虑关闭挂钩。 请参阅:Java shutdown hook