我需要一些可以启动的例程 R,它每 5 秒执行一次任务 T。
然后我需要暂停这个重复例程 R - 但确保一旦它启动了一个任务 T,这个任务就完成了,然后重复例程才停止开始下一个任务。每个开始的任务都应该允许完成!任务本身最多需要 2 秒,因此重复过程中没有重叠!
此外,我需要确保仅在任务 T 完成后才启动另一个例程 R2。
所以基本上这就是它的样子:
start R
- R starts T the first time
- T runs and finishes, this task T takes maximum 2 seconds
- T starts again after 5 seconds it started the first time
now stop R (because user pressed a button)
- let T finish
- stop R from starting a new Task
continue with R2 (basically the task from which the button has been pressed)
BUT continue with R2 ONLY AFTER T has finished for sure! - and R will not repeat any new T
once R2 is done continue with R
- so R will start a new task T
所以基本上我需要任务 T 的例程 R 作为某种“保持忙碌的例程”,而用户例如阅读文本。
当用户完成阅读并想通过按下按钮继续时,“保持忙碌例程”应该停止并仅在用户的预期任务完成后再次继续,该任务首先由按钮按下触发
所以我发现
private final static ScheduledExecutorService scheduler = Executors
.newScheduledThreadPool(1);
// Schedule a task to run every 5 seconds with no initial delay.
scheduler.scheduleAtFixedRate(new Runnable() {
public void run() {
..do task T
}
}, 0L, 5L, TimeUnit.SECONDS);
但是在 R2 继续之前所有的停止、继续和等待 T 完成,我不知道该怎么做。