我创建了一个Runnable类,负责监视目录以进行文件更改。
... imports ...
public class ExamplePathWatch implments Runnable {
...
private boolean isRunning = true;
...
@Override
public void run() {
while(isRunning) {
[1]... wait for a file change ...
[2]... notify listeners of file change (if any) ...
}
}
public synchronized void stopPathWatch() {
isRunning = false;
... interrupt [1] and allow the thred to exit immediately...
}
线程在 [1] 处暂停,直到发生文件更改,或调用stopPathWatch()
方法设置isRunning = false
并中断当前等待 [1]
在主应用程序退出之前,调用stopPathWatch()
,允许线程退出,整个应用程序完全终止。
我的问题是,当应用程序崩溃时,主应用程序终止,而不调用stopPathWatch()
。因此,应用程序会在后台无限期地运行,直到通过操作系统终止它为止。
由于应用程序上存在非常活跃的开发并且并未处理所有异常,因此无论主应用程序如何终止,是否有建议的方法来确保子线程被停止?
由于
答案 0 :(得分:8)
您可以将ExamplePathWatch
作为守护程序线程运行。只有未标记为守护程序的线程才会阻止应用程序退出。
答案 1 :(得分:1)
您可以将其添加为关闭钩子:
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
stopPathWatch();
}
});
此代码必须在程序中的某个位置。