【发布时间】:2021-06-21 11:55:42
【问题描述】:
我一直在使用 Schedule Executor 服务每 3 秒运行一次我的代码。在我的情况下,有没有办法每 3 秒运行 24 小时?我的代码看起来像这样。它的作用并不重要,因此我将其全部删除。我唯一关心的部分是List<String>,原因是在这 24 小时之后,我想用这个列表做更多的事情。
public static void main(String[] args) throws Exception {
ScheduledExecutorService ses = Executors.newScheduledThreadPool(2);
ses.scheduleWithFixedDelay(new Runnable() {
// nonImportantVariables here
List<String> importantList = new ArrayList<String>();
public void run() {
//Not important code
}, 0, 3, TimeUnit.SECONDS);
// AFTER 24 HOURS I WOULD LIKE TO PERFORM TASKS ON IMPORTANT LIST
}
}
我考虑过添加一个循环,使其运行 28,800 次(即 24 小时内有多少 3 秒),但这似乎是一个愚蠢的解决方法,而且我也会遇到这样的问题代码需要多长时间才能运行,所以最终会更长。
我的第二个想法是,第一次运行迭代时,我可以使用 Date 对象。使用这个 Date 对象,我可以以某种方式在其上添加 24 小时,并有一些方法可以在第一次迭代 + 24 小时时将当前 Date 对象与 Date 对象进行比较。
我似乎在 Schedule executor service 的文档中找不到任何东西,我可以在其中设置运行命令的次数。非常感谢对这些想法或不同解决方案的任何改进。
【问题讨论】:
-
为什么不安排另一个将在 24 小时后开始并关闭之前的服务的作业?
-
我没想到!所以如果我从我的程序第一次启动开始设置一个 24 小时的延迟,它就会触发并在我的列表中执行操作。这会自动停止我的第一个服务还是我需要做一些特别的事情?
-
只需调用您要关闭的服务的相应
shutdown方法即可。
标签: java scheduled-tasks