java - 有没有办法使用 ScheduledThreadPoolExecutor.scheduleAtFixedRate 强制速率?
问题描述
使用 ScheduledThreadPoolExecutor.scheduleAtFixedRate 时,任务的连续执行不会重叠。
虽然不同的执行可能由不同的线程执行,但先前执行的影响发生在后续执行的影响之前。
因此,如果任务执行时间长于期限,则无法保证期限。有没有最好的方法来保证经期?
解决方案
如果要求是将任务作为后台任务运行并且不关心结果,那么
- 创建一个
Runnable
将创建一个Thread
和start()
内联的 - 提交
Runnable
public static void main(String[] args) {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Runnable runnable = () -> {
new Thread(() -> {
System.out.println("Started ");
try {
Thread.sleep(5000);
} catch (Exception e) {
System.out.println(e);
}
System.out.println("Completed");
}).start();
};
executor.scheduleAtFixedRate(runnable, 0, 2, TimeUnit.SECONDS);
}
推荐阅读
- angular - Angular中的ngStyle背景图像
- javascript - Drupal 8 搜索模块
- javascript - 从 div 数组中获取所有输入
- c# - 你知道在holo下构建时如何解决这个问题吗?CS0234
- typescript - 在打字稿中没有正确检查条件/三元结果?
- c# - 在 ASP.Net 中使用 Web 服务,不工作
- javascript - 将参数添加到函数以仅在值与数组中的名称匹配时执行
- aws-lambda - 将 SQS Lambda 批处理拆分为部分成功/部分失败
- php - MySQL 查询在晚上没有返回结果,也没有抛出错误
- html - 如何将'*'函数属性赋予html中的另一个div