能用ScheduledFuture实现 Java实现 20秒内,根据时间间隔 重复调用某方法 ,超过20秒停止 详细代码实现 中文
时间: 2024-03-12 22:50:07 浏览: 165
java定时执行代码.
当您需要在Java中实现某个方法在一定时间内根据时间间隔重复调用,但同时需要在超过一定时间后停止重复调用时,您可以使用ScheduledFuture。
下面是一个示例代码,该代码会在20秒内每隔1秒、2秒、3秒交替重复调用run()方法,超过20秒后停止调用:
```
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class ScheduledFutureDemo {
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
private ScheduledFuture<?> future;
private int count = 0;
public void startTask() {
final Runnable task = new Runnable() {
public void run() {
count++;
System.out.println("Task count: " + count);
if (count == 20) {
stopTask();
} else {
long delay = count % 3 + 1; // 1秒、2秒、3秒交替
future = scheduler.schedule(task, delay, TimeUnit.SECONDS);
}
}
};
future = scheduler.schedule(task, 1, TimeUnit.SECONDS);
}
public void stopTask() {
future.cancel(false);
scheduler.shutdown();
}
public static void main(String[] args) {
ScheduledFutureDemo demo = new ScheduledFutureDemo();
demo.startTask();
}
}
```
在这个示例中,我们首先创建了一个ScheduledExecutorService来管理定时任务。然后我们定义了一个startTask()方法,该方法创建了一个Runnable对象task并将其传递给scheduler.schedule()方法,该方法会在1秒后开始执行task,并且在执行完task后会根据count的值计算出下一次执行的时间间隔(1秒、2秒、3秒交替),并调用scheduler.schedule()方法重复执行task。
在task的run()方法中,我们对任务执行的次数进行计数,并在达到20次时调用stopTask()方法停止任务。在每次执行完task后,我们根据count的值计算出下一次执行的时间间隔,并调用scheduler.schedule()方法重复执行task。
在stopTask()方法中,我们调用future.cancel()方法取消任务的重复调用,并调用scheduler.shutdown()方法关闭ScheduledExecutorService。
最后,在main()方法中,我们实例化了ScheduledFutureDemo类并调用了startTask()方法来启动定时任务。
阅读全文