Java安排任务在固定时间运行,延迟或重复运行

示例

的ScheduledExecutorService类提供了用于在多种方式的调度单次或重复任务的方法。下面的代码示例假定pool已按照以下说明进行了声明和初始化:

ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);

除了常规ExecutorService方法外,ScheduledExecutorServiceAPI还添加了4种调度任务和返回ScheduledFuture对象的方法。后者可用于检索结果(在某些情况下)和取消任务。

固定延迟后开始任务

下面的示例计划任务在十分钟后开始。

ScheduledFuture<Integer> future = pool.schedule(new Callable<>() {
        @Override public Integer call() {
            // 做点什么
            return 42;
        }
    }, 
    10, TimeUnit.MINUTES);

以固定速率启动任务

下面的示例计划任务在十分钟后开始,然后以每分钟一次的速率重复执行。

ScheduledFuture<?> future = pool.scheduleAtFixedRate(new Runnable() {
        @Override public void run() {
            // 做点什么
        }
    }, 
    10, 1, TimeUnit.MINUTES);

任务将按照计划继续执行,直到将pool其关闭,future取消或某个任务遇到异常为止。

确保给定scheduledAtFixedRate呼叫安排的任务不会在时间上重叠。如果任务花费的时间超过规定的时间,则下一个和后续任务的执行可能会延迟开始。

固定延迟启动任务

下面的示例将任务计划为在十分钟后开始,然后在一个任务结束与下一个任务开始之间以一分钟的延迟重复执行。

ScheduledFuture<?> future = pool.scheduleWithFixedDelay(new Runnable() {
        @Override public void run() {
            // 做点什么
        }
    }, 
    10, 1, TimeUnit.MINUTES);

任务将按照计划继续执行,直到将pool其关闭,future取消或某个任务遇到异常为止。