我想创建一个线程,该线程将在后台不断运行,以检查程序运行时的状态。我只想知道如何保持其运行以及如何制作线程。

最佳答案

Executors.newSingleThreadExecutor().submit(new ApplicationMonitor());

class ApplicationMonitor implements Runnable {
    public void run() {
        // do your monitoring stuff
    }
}


ApplicationMonitor应该永远不会返回,也永远不会引发异常。或者,也许更安全地,使ApplicationMonitor仅执行一项检查,然后将commit()调用置于循环中。然后,监视可能会失败,稍后将重新启动:

while (true) {
    try {
        Future<?> future = Executors.newSingleThreadExecutor().submit(
                    new ApplicationMonitor());
        future.get(); // can add a timeout here to limit the monitoring thread
    } catch (Exception e) {
        reportMonitoringException(e);
    }
    sleepUntilNextMonitoringCycle();
}


最后,您可以让Java为您安排时间:

ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
executorService.scheduleWithFixedDelay(
    new ApplicationMonitor(), 0, 30, TimeUnit.MINUTES);


使用这种方法,您无法获得所有计划的调用的Future,因此必须在ApplicationMonitor中处理您的异常。

07-24 19:02