我想使用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
,这种方法就不会出错,它只会在每次迭代时以相同的延迟重新计划同一任务。对于调度程序,它将被视为在每次迭代中调度的新任务,仅此而已。