我们有一个带有ServletContextListener的Web应用程序,它启动了几个ScheduledExecutorService 通过SNMP在运行Web应用程序的服务器之外的远程位置更新某些中继板。
但是,由于远程位置的互联网连接丢失,可能会导致远程继电器不可用。
当发生这种情况时,更新板的线程需要很长时间才能执行。如何监视ScheduledExecutorService的执行和运行?
现在我使用以下代码启动线程:
schedulerLichtsturing = Executors.newSingleThreadScheduledExecutor();
schedulerLichtsturing.scheduleAtFixedRate(new LichtsturingDaemon(), 0, 15, TimeUnit.SECONDS);
但是我已经看到线程在一段时间后不再运行了,我不知道为什么它会停止。由于未被捕获的异常或其他原因?我该如何监控?
我还要监视线程的运行状态和上次更新的时间。
我该如何解决这个问题?
答案 0 :(得分:0)
你可以这样使用:
private void runThrowException() throws Exception {
throw new Exception("This allways throw an exception.");
}
Runnable runnable = new Runnable() {
public void run() {
try {
runThrowException();
}catch (Exception exception) {
System.out.println("Catch exception: " + exception.toString());
}
}
};
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(runnable, 1, 1, TimeUnit.SECONDS);
如果子函数返回异常,则调度执行器继续运行。
我知道,它并没有解决监控问题...