首页 > 解决方案 > 有没有办法使用 ScheduledThreadPoolExecutor.scheduleAtFixedRate 强制速率?

问题描述

使用 ScheduledThreadPoolExecutor.scheduleAtFixedRate 时,任务的连续执行不会重叠。

虽然不同的执行可能由不同的线程执行,但先前执行的影响发生在后续执行的影响之前。

因此,如果任务执行时间长于期限,则无法保证期限。有没有最好的方法来保证经期?

标签: javaexecutorservice

解决方案


如果要求是将任务作为后台任务运行并且不关心结果,那么

  1. 创建一个Runnable将创建一个Threadstart()内联的
  2. 提交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);
    }

推荐阅读