java.util.concurrent.ScheduledExecutorService 定时任务怎样实现
时间: 2023-08-16 12:15:36 浏览: 227
`java.util.concurrent.ScheduledExecutorService`是Java提供的用于执行定时任务的接口。它可以通过线程池来管理任务的执行,并提供了更灵活和功能更强大的定时任务调度机制。下面是一个示例:
```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class TaskScheduler {
public static void main(String[] args) {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Runnable task = new Runnable() {
@Override
public void run() {
// 在这里编写要定时执行的任务逻辑
System.out.println("任务执行中...");
}
};
// 延迟1秒后执行任务,之后每隔1秒执行一次
executor.scheduleAtFixedRate(task, 1, 1, TimeUnit.SECONDS);
// 等待一段时间后关闭线程池
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
executor.shutdown();
}
}
```
在上面的示例中,我们使用`Executors.newScheduledThreadPool(int)`方法创建了一个大小为1的线程池,然后通过`executor.scheduleAtFixedRate(Runnable, initialDelay, period, TimeUnit)`方法来安排任务的执行。其中,`Runnable`表示要执行的任务,`initialDelay`表示延迟执行的时间,`period`表示任务的执行间隔,`TimeUnit.SECONDS`表示时间单位为秒。
在`Runnable`的`run()`方法中,编写了要定时执行的任务逻辑。在这个示例中,任务逻辑是简单地输出一条信息。
通过调用`executor.shutdown()`方法,可以手动关闭线程池,停止任务的执行。
需要注意的是,`scheduleAtFixedRate()`方法是按固定的时间间隔执行任务,不受任务执行时间的影响。如果任务执行时间超过了执行间隔,那么下一次任务将会立即开始,而不会等待上一次任务执行完毕。如果希望任务在上一次执行结束后再延迟一段时间再执行,可以使用`scheduleWithFixedDelay()`方法。
阅读全文
相关推荐
















