Android Spring 引导中的 CountDownTimer 替代项 (Java)
Android CountDownTimer alternative in Spring Boot (Java)
我有这种情况,我的传感器的数据每 5 分钟发送到我的服务器。服务器将接收到的数据存储在数据库中。现在,当服务器收到数据时,我想为这个特定传感器启动 6 分钟计时器。如果我在这 6 分钟之前收到数据,则必须取消并重新启动此计时器。如果计时器恰好结束,则必须调用 onFinish()
,然后我将向用户发送有关传感器可能存在连接问题的通知。我有这个传感器列表和一个在服务器接收数据时调用的方法:
// list to save sensors and their timers
private val sensors: MutableMap<Long, CountDownTimer> = HashMap()
// this method gets called after server receives data from the sensor
// must keep in mind that CountDownTimer is undefined
fun initiateTimer(sensorId: Long) {
sensors[sensorId] = object : CountDownTimer(360000, 1000) {
fun onTick(duration: Long) {
// Blank
}
fun onFinish() {
// Send notification to user about possible connection issue
}
}.start()
}
我一直在研究 scheduleWithFixedDelay
,但这需要 ExecutorService
具有特定的线程数。现在,如果我有数千个传感器并且我同时需要那一千个计时器怎么办?运行?
现在 Android,我可以简单地使用 CountDownTimer
,但由于它不是 Android,我正在寻求使用 [=18 解决此问题的最佳方法的建议=] 在 Spring Boot
环境中(或者简单来说,不在 Android
环境中)。谢谢。
您发现的 ScheduledExecutorService 是未来安排任务的标准方式。您可以安排数千个计时器并使用单个线程执行所有计时器 - 没问题。
或者,如果您使用协程,则可以使用像 delay() or withTimeout().
这样的实用程序
此外,如果您真的打算拥有大量这样的计时器,那么实施和维护替代解决方案可能会更容易,我们只有一个“滴答”thread/coroutine 来检查所有传感器一次例如10 秒。它遍历所有传感器并检查上次接收数据的时间。当新数据到达时,我们只更新时间,但不需要取消和重启任何定时器。
我有这种情况,我的传感器的数据每 5 分钟发送到我的服务器。服务器将接收到的数据存储在数据库中。现在,当服务器收到数据时,我想为这个特定传感器启动 6 分钟计时器。如果我在这 6 分钟之前收到数据,则必须取消并重新启动此计时器。如果计时器恰好结束,则必须调用 onFinish()
,然后我将向用户发送有关传感器可能存在连接问题的通知。我有这个传感器列表和一个在服务器接收数据时调用的方法:
// list to save sensors and their timers
private val sensors: MutableMap<Long, CountDownTimer> = HashMap()
// this method gets called after server receives data from the sensor
// must keep in mind that CountDownTimer is undefined
fun initiateTimer(sensorId: Long) {
sensors[sensorId] = object : CountDownTimer(360000, 1000) {
fun onTick(duration: Long) {
// Blank
}
fun onFinish() {
// Send notification to user about possible connection issue
}
}.start()
}
我一直在研究 scheduleWithFixedDelay
,但这需要 ExecutorService
具有特定的线程数。现在,如果我有数千个传感器并且我同时需要那一千个计时器怎么办?运行?
现在 Android,我可以简单地使用 CountDownTimer
,但由于它不是 Android,我正在寻求使用 [=18 解决此问题的最佳方法的建议=] 在 Spring Boot
环境中(或者简单来说,不在 Android
环境中)。谢谢。
ScheduledExecutorService 是未来安排任务的标准方式。您可以安排数千个计时器并使用单个线程执行所有计时器 - 没问题。
或者,如果您使用协程,则可以使用像 delay() or withTimeout().
这样的实用程序此外,如果您真的打算拥有大量这样的计时器,那么实施和维护替代解决方案可能会更容易,我们只有一个“滴答”thread/coroutine 来检查所有传感器一次例如10 秒。它遍历所有传感器并检查上次接收数据的时间。当新数据到达时,我们只更新时间,但不需要取消和重启任何定时器。