【发布时间】:2021-12-18 20:39:50
【问题描述】:
作为我功课的一部分,我正在尝试编写一个 java 方法来安排每 x 毫秒运行一次的任务
public ScheduledTask scheduleEvery(long time, Runnable task)
第一次执行是在调用另一个方法 fire(long time) 时。例如:
- 时间 = 2001
- 提交 scheduler.every(1000, runnable);
- fire(2345) -> runnable 被执行 -> 计划在 3345
- fire(3123) -> 注意发生
- fire(4566) -> runnable 执行一次 -> 调度到 5566 ....
我正在考虑创建一个列表来存储这些任务。当调用 fire() 时,它们将被执行,从列表中删除并在 x 毫秒后重新安排。谁能告诉我这是否可行?
【问题讨论】:
-
如果你真的想这样做(而且这不是你自己写的作业)然后使用:docs.oracle.com/javase/8/docs/api/java/util/concurrent/…
-
遗憾的是,这确实是我的硬件,我必须从头开始构建它
-
您能否详细说明为什么
fire(3123)不会发生任何事情?那是因为已经有计划任务了吗?为什么fire(2345)会导致重新安排,因为已经为 3001 安排了任务?那是因为该任务已经运行一次了吗? -
第一次调用 fire() 时执行任务,在本例中为 2345,由于我的(尚未编码) scheduleEvery() 的性质,它被安排为 2345+1000 =3345。由于 3345>3123,火灾(3123)等没有任何反应
标签: java scheduled-tasks