如何在Java中设置定时器?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (59)

如何设置一个定时器,例如2分钟,尝试连接到数据库,然后在连接中出现任何问题时抛出异常?

提问于
用户回答回答于

首先需要创建一个计时器(我使用的是java.util(此处版本):

import java.util.Timer;

..。

Timer timer = new Timer();

若要运行该任务,执行以下操作:

timer.schedule(new TimerTask() {
  @Override
  public void run() {
    // Your database code here
  }
}, 2*60*1000);

若要在要执行的持续时间后重复任务,执行以下操作:

timer.scheduleAtFixedRate(new TimerTask() {
  @Override
  public void run() {
    // Your database code here
  }
}, 2*60*1000, 2*60*1000);

要具体地执行已澄清的问题,即尝试在给定时间内执行任务,可以执行以下操作:

ExecutorService service = Executors.newSingleThreadExecutor();

try {
    Runnable r = new Runnable() {
        @Override
        public void run() {
            // Database task
        }
    };

    Future<?> f = service.submit(r);

    f.get(2, TimeUnit.MINUTES);     // attempt the task for two minutes
}
catch (final InterruptedException e) {
    // The thread was interrupted during sleep, wait or join
}
catch (final TimeoutException e) {
    // Took too long!
}
catch (final ExecutionException e) {
    // An exception from within the Runnable task
}
finally {
    service.shutdown();
}

如果任务在2分钟内完成,这将正常执行,但有例外情况。如果运行时间超过这个时间,则抛出TimeoutException。

用户回答回答于

用这个

long startTime = System.currentTimeMillis();
long elapsedTime = 0L.

while (elapsedTime < 2*60*1000) {
    //perform db poll/check
    elapsedTime = (new Date()).getTime() - startTime;
}

//Throw your exception

扫码关注云+社区

领取腾讯云代金券