ScheduledExecutorService

ScheduledExecutorService

我想使用ScheduledExecutorService做一些计时任务,但是时间间隔是可变的。我尝试在任务完成之前重新安排时间:

import java.io.IOException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class Test {
    public static ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
    public static int interval = 1;

    public static void main(String[] args) throws IOException {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println(System.currentTimeMillis() / 1000);
                interval += 1;
                scheduledExecutorService.schedule(this, interval, TimeUnit.SECONDS);
            }
        };
        scheduledExecutorService.schedule(runnable, interval, TimeUnit.SECONDS);
    }
}


但是,我从未发现有人使用ScheduledExecutorService这样的计时任务,我想知道它是否安全。

最佳答案

只要您使用仅执行一次任务的方法schedule,这种方法就不会出错,它只会在每次迭代时以相同的延迟重新计划同一任务。对于调度程序,它将被视为在每次迭代中调度的新任务,仅此而已。

10-06 07:20