java - Java - 递归调度计时器任务
问题描述
有没有办法仅在方法完成后才运行计时器任务。该方法可能需要 10 秒,但计时器设置为每 5 秒运行一次。我希望它仅在 10 秒后再次运行。
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
longRunningMethod();
timer.schedule(task, 0, 5000);
}
};
timer.schedule(task, 0, 10000);
解决方案
您可以使用ScheduledExecutorService
which has a scheduleWithFixedDelay()
method 正是这样做的。
“创建并执行一个周期性操作,该操作在给定的初始延迟后首先启用,随后在一个执行的终止和下一个执行的开始之间具有给定的延迟。”
所以你可以做
ExecutorService.newScheduledExecutor()
.submit(this::longRunningMethod, 0, 1000, ChronoUnit.MILLIS);
推荐阅读
- laravel - Laravel,将路由参数限制为表列值
- c - 圆形滚动数组
- java - 如何编写从物理扫描仪设备扫描图像的 java 代码?
- kotlin - 在 Android 中创建改造服务的正确方法?
- c++ - 指针指向哪里?
- vue.js - Vuejs根据单选按钮选择更改路由器路径
- php - 如何在 Laravel 刀片文件的嵌套集自定义函数中传递控制器数据值
- python - Django admin 如何解决所有部分不可见的问题?
- reactjs - 关于 Jest 中的控制台错误“未实现:HTMLCanvasElement.prototype.getContext(未安装 canvas npm 包)”
- python - 使用 kivy 模块运行 py 文件需要做什么