【问题标题】:Implemeting an Interrupt Service Routine in Java在 Java 中实现中断服务程序
【发布时间】:2013-12-24 09:58:50
【问题描述】:

我正在构建一个连接到路由器的应用程序,获取一些数据并将获取的数据插入数据库。

我需要每 30 秒从路由器获取一次数据。然后回来用新获取的数据更新数据库。

我不知道如何实现那个定时器机制(它类似于中断服务程序机制)。

我是 Java 新手,有什么帮助吗?我应该使用线程吗?我简要阅读了有关线程的信息,但不知道它们是如何工作的。

编辑: 请注意,我在 main 中还有其他事情要做。主要是执行几个功能。但是,每 30 秒我想执行一个附加功能。

【问题讨论】:

  • ScheduledExecutorService.

标签: java multithreading timer interrupt


【解决方案1】:

由于您需要运行其他代码,您可以这样做

ScheduleExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.scheduleAtFixedRate(new Runnable() {
    public void run() {
        Data data = getDataFromRouter();
        updateDatabase(data);
    }
}, 0, 30, TimeUnit.SECONDS);

否则我会有一个像这样的简单循环。

while(true) {
    Data data = getDataFromRouter();
    updateDatabase(data);
    Thread.sleep(30 * 1000);
}

你至少需要一个线程,但你从一个开始。

【讨论】:

  • 我还有其他事情要做,我不想睡觉。这就是我称之为中断服务程序的原因。主要是执行几个功能。但是,每 30 秒我想执行一个附加功能。
  • @ShadyAhmed 你没这么说。您可以在问题中添加这些详细信息吗?
  • 我找不到我能找到的 newScheduledExecutorService 函数:newScheduledThreadPool 代替!
  • @ShadyAhmed 我现在已经解决了。
【解决方案2】:

更简洁的方法是安排定期任务。

您可以使用不同的 API:

  • ScheduledExecutorService.scheduleAtFixedRate(...)
  • Timer.scheduleAtFixedRate(..)

两者都会定期执行您的代码。

【讨论】:

  • 感谢您的关心,但我已经尝试了一段时间,我很困惑。 ScheduledExecutorService.scheduleAtFixedRate 将第一个参数作为 Runnable。而 Timer.scheduleAtFixedRate 第一个参数是可调用的,这些是什么?我检查了文档,但我无法理解,我是否必须创建一个新类并将其传递给那里?
  • Runnable/Callable 应该由包含检索数据和更新数据库所需的代码的类(可以是匿名的)实现。即所有必须定期执行的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 2023-03-03
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 2020-04-23
  • 2011-01-16
相关资源
最近更新 更多