监视Java Web应用程序中的ScheduledExecutorService

时间:2013-04-21 16:14:18

标签: java servlets web

我们有一个带有ServletContextListener的Web应用程序,它启动了几个ScheduledExecutorService 通过SNMP在运行Web应用程序的服务器之外的远程位置更新某些中继板。

但是,由于远程位置的互联网连接丢失,可能会导致远程继电器不可用。

当发生这种情况时,更新板的线程需要很长时间才能执行。如何监视ScheduledExecutorService的执行和运行?

现在我使用以下代码启动线程:

schedulerLichtsturing = Executors.newSingleThreadScheduledExecutor();
schedulerLichtsturing.scheduleAtFixedRate(new LichtsturingDaemon(), 0, 15, TimeUnit.SECONDS);

但是我已经看到线程在一段时间后不再运行了,我不知道为什么它会停止。由于未被捕获的异常或其他原因?我该如何监控?

我还要监视线程的运行状态和上次更新的时间。

我该如何解决这个问题?

1 个答案:

答案 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);

如果子函数返回异常,则调度执行器继续运行。

我知道,它并没有解决监控问题...