我想创建一个线程,该线程将在后台不断运行,以检查程序运行时的状态。我只想知道如何保持其运行以及如何制作线程。
最佳答案
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中处理您的异常。