java - 确保主应用程序崩溃时停止无限循环线程

标签 java multithreading

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

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

谢谢

最佳答案

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

关于java - 确保主应用程序崩溃时停止无限循环线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15248885/

相关文章:

java - 使用 Web 服务时类似事务的逻辑

windows - 并行化具有多个导出点的算法?

java - 如何在字符串文本中搜索单词,这个单词在java中以 "."或 ","结尾

java - 所有评估都是从左到右进行的吗?

java - 我应该如何在一个文件中构建多个类和方法的结构?

Java 内存泄漏 - FileReaders、BufferedReaders 和 Stacks

multithreading - 等待事件,但至少等待指定时间

java - 对线程行为有点困惑

multithreading - Racket 中的公平线程调度程序时基

WPF 多线程