在使用ScheduledExecutorService完成任务之前重新安排任务是否安全?

时间:2017-01-13 16:42:48

标签: java 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进行计时任务,我不知道它是否安全。

1 个答案:

答案 0 :(得分:2)

只要您使用仅执行一次任务的方法schedule,此方法就没有任何问题,它只会在每次迭代时重新安排具有不同延迟的相同任务。对于调度程序,它将被视为在每次迭代时安排的新任务,仅此而已。