上面的代码在一些场景中我需要定时执行,且还需要可以停止执行
时间: 2024-02-12 16:03:57 浏览: 22
如果需要在Java中定时执行任务并且可以停止执行,可以使用ScheduledThreadPoolExecutor类来创建定时线程池。ScheduledThreadPoolExecutor类可以定期调度或延迟执行任务,同时提供了停止定时任务的方法。以下是一个示例代码:
```
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class MyScheduledThreadPool {
private static final ScheduledExecutorService SCHEDULED_EXECUTOR_SERVICE =
Executors.newScheduledThreadPool(1);
private static ScheduledFuture<?> future;
public static void start() {
if (future == null || future.isCancelled()) {
future = SCHEDULED_EXECUTOR_SERVICE.scheduleAtFixedRate(
() -> {
// 定时执行的任务
},
0,
1,
TimeUnit.SECONDS
);
}
}
public static void stop() {
if (future != null) {
future.cancel(true);
}
}
}
```
在上述代码中,我们使用Executors类创建了一个ScheduledExecutorService对象,并将其定义为静态变量SCHEDULED_EXECUTOR_SERVICE。然后,我们提供了一个start方法用于启动定时任务,通过scheduleAtFixedRate方法来定期调度任务执行,其中第二个参数表示初始延迟时间,第三个参数表示定时任务执行的间隔时间,第四个参数表示时间单位。最后,我们提供了一个stop方法用于停止定时任务,通过调用ScheduledFuture的cancel方法来实现。
使用定时线程池时,只需要调用MyScheduledThreadPool.start()方法即可启动定时任务,调用MyScheduledThreadPool.stop()方法即可停止定时任务。