我需要定义一个公共线程池,提供入参为Runnable和间隔时间的方法定时执行runnable,且还需要可以停止执行
时间: 2024-02-12 21:03:59 浏览: 81
如果需要在Java中定义一个公共线程池,并提供入参为Runnable和间隔时间的方法定时执行runnable,并且可以停止执行,可以使用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 scheduleAtFixedRate(Runnable task, long initialDelay, long period, TimeUnit unit) {
if (future == null || future.isCancelled()) {
future = SCHEDULED_EXECUTOR_SERVICE.scheduleAtFixedRate(
task,
initialDelay,
period,
unit
);
}
}
public static void stop() {
if (future != null) {
future.cancel(true);
}
}
}
```
在上述代码中,我们使用Executors类创建了一个ScheduledExecutorService对象,并将其定义为静态变量SCHEDULED_EXECUTOR_SERVICE。然后,我们提供了一个scheduleAtFixedRate方法用于启动定时任务,通过scheduleAtFixedRate方法来定期调度任务执行,其中第一个参数为Runnable实例,第二个参数表示初始延迟时间,第三个参数表示定时任务执行的间隔时间,第四个参数表示时间单位。最后,我们提供了一个stop方法用于停止定时任务,通过调用ScheduledFuture的cancel方法来实现。
使用定时线程池时,只需要调用MyScheduledThreadPool.scheduleAtFixedRate(task, initialDelay, period, unit)方法即可启动定时任务,调用MyScheduledThreadPool.stop()方法即可停止定时任务。
阅读全文