用Java实现中断服务例程

用Java实现中断服务例程,java,multithreading,timer,interrupt,Java,Multithreading,Timer,Interrupt,我正在构建一个连接到路由器的应用程序,获取一些数据并将获取的数据插入数据库 我需要每隔30秒从路由器获取数据。然后回来用新获取的数据更新数据库 我不知道如何实现计时器机制(它类似于中断服务例程机制) 我是Java新手,有什么帮助吗?我应该用线吗?我简单地读了一些关于线程的文章,但不知道它们是如何工作的 编辑: 请注意,我主要还有其他事情要做。主要任务是执行几个函数。但是,每30秒我就要执行一个附加函数。因为您需要运行其他代码,所以可以这样做 ScheduleExecutorService ses

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

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

我不知道如何实现计时器机制(它类似于中断服务例程机制)

我是Java新手,有什么帮助吗?我应该用线吗?我简单地读了一些关于线程的文章,但不知道它们是如何工作的

编辑:
请注意,我主要还有其他事情要做。主要任务是执行几个函数。但是,每30秒我就要执行一个附加函数。

因为您需要运行其他代码,所以可以这样做

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);
}

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

正如您需要运行其他代码一样,您可以这样做

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);
}

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

正如您需要运行其他代码一样,您可以这样做

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);
}

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

正如您需要运行其他代码一样,您可以这样做

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);
}

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

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

您可以使用不同的API:

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

两者都将定期执行代码。

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

您可以使用不同的API:

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

两者都将定期执行代码。

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

您可以使用不同的API:

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

两者都将定期执行代码。

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

您可以使用不同的API:

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


两者都将定期执行代码。

ScheduledExecutorService
ScheduledExecutorService
ScheduledExecutorService
ScheduledExecutorService
。我主要还有其他事情要做,我不想睡觉。这就是为什么我叫它中断服务程序。主要任务是执行几个函数。但是,每30秒我就要执行一个附加函数。@ShadyAhmed你没有这么说。您可以将这些详细信息添加到问题中吗?我找不到可以找到的newScheduledExecutorService函数:newScheduledThreadPool@ShadyAhmed我现在已经修好了。我还有其他事情要做,我不想睡觉。这就是为什么我叫它中断服务程序。主要任务是执行几个函数。但是,每30秒我就要执行一个附加函数。@ShadyAhmed你没有这么说。您可以将这些详细信息添加到问题中吗?我找不到可以找到的newScheduledExecutorService函数:newScheduledThreadPool@ShadyAhmed我现在已经修好了。我还有其他事情要做,我不想睡觉。这就是为什么我叫它中断服务程序。主要任务是执行几个函数。但是,每30秒我就要执行一个附加函数。@ShadyAhmed你没有这么说。您可以将这些详细信息添加到问题中吗?我找不到可以找到的newScheduledExecutorService函数:newScheduledThreadPool@ShadyAhmed我现在已经修好了。我还有其他事情要做,我不想睡觉。这就是为什么我叫它中断服务程序。主要任务是执行几个函数。但是,每30秒我就要执行一个附加函数。@ShadyAhmed你没有这么说。您可以将这些详细信息添加到问题中吗?我找不到可以找到的newScheduledExecutorService函数:newScheduledThreadPool@ShadyAhmed我现在已经解决了。谢谢你的关心,但我已经尝试了一段时间,我感到困惑。ScheduledExecutorService.scheduleAtFixedRate将第一个参数作为可运行参数。虽然Timer.scheduleAtFixedRate第一个参数是可调用的,但它们是什么?我检查了文档,但我不明白,我必须创建一个新类并将其传递到那里吗?Runnable/Callable应该由包含检索数据和更新数据库所需代码的类(可以是匿名类)实现。i、 所有必须定期执行的代码。谢谢你的关注,但我已经尝试了一段时间,我感到困惑。ScheduledExecutorService.scheduleAtFixedRate将第一个参数作为可运行参数。虽然Timer.scheduleAtFixedRate第一个参数是可调用的,但它们是什么?我检查了文档,但我不明白,我必须创建一个新类并将其传递到那里吗?Runnable/Callable应该由包含检索数据和更新数据库所需代码的类(可以是匿名类)实现。i、 所有必须定期执行的代码。谢谢你的关注,但我已经尝试了一段时间,我感到困惑。ScheduledExecutorService.scheduleAtFixedRate将第一个参数作为可运行参数。虽然Timer.scheduleAtFixedRate第一个参数是可调用的,但它们是什么?我检查了文档,但我不明白,我必须创建一个新类并将其传递到那里吗?Runnable/Callable应该由包含检索数据和更新数据库所需代码的类(可以是匿名类)实现。i、 所有必须定期执行的代码。谢谢你的关注,但我已经尝试了一段时间