我想使用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
进行计时任务,我不知道它是否安全。
答案 0 :(得分:2)
只要您使用仅执行一次任务的方法schedule
,此方法就没有任何问题,它只会在每次迭代时重新安排具有不同延迟的相同任务。对于调度程序,它将被视为在每次迭代时安排的新任务,仅此而已。