2

我创建了一个 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()被调用。因此,应用程序会在后台无限期地运行,直到它被操作系统杀死。

由于应用程序的开发非常活跃,并且并非所有异常都得到处理,因此无论主应用程序如何终止,是否有推荐的方法来确保子线程停止?

谢谢

4

2 回答 2

8

您可以将其ExamplePathWatch作为守护线程运行。只有未标记为守护进程的线程才会阻止应用程序退出。

于 2013-03-06T13:42:21.387 回答
1

您可以将其添加为关闭挂钩:

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        stopPathWatch();
    }
});

这段代码必须在你的程序中的某个地方。

于 2013-03-06T13:44:29.560 回答