ScheduledExecutorService定时任务
时间: 2023-10-17 21:26:44 浏览: 108
ScheduledExecutorService是Java中用于定时执行任务的接口。它是ExecutorService的子接口,提供了在指定的延迟后执行任务或定期执行任务的功能。
使用ScheduledExecutorService可以创建一个线程池,其中的线程可以按照指定的时间间隔执行任务。它提供了以下几种常用的方法:
1. schedule(Runnable command, long delay, TimeUnit unit):在指定的延迟时间后执行任务。
2. schedule(Callable<V> callable, long delay, TimeUnit unit):在指定的延迟时间后执行任务,并返回一个可以获取执行结果的Future对象。
3. scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit):在指定的初始延迟后开始执行任务,并以固定的时间间隔重复执行。
4. scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit):在指定的初始延迟后开始执行任务,并在每次执行完成后,等待指定的延迟时间后再次执行。
下面是一个简单示例:
```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledTaskExample {
public static void main(String[] args) {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
// 延迟5秒后执行任务
executor.schedule(() -> {
System.out.println("任务执行");
}, 5, TimeUnit.SECONDS);
// 初始延迟2秒,每隔3秒重复执行任务
executor.scheduleAtFixedRate(() -> {
System.out.println("定期执行任务");
}, 2, 3, TimeUnit.SECONDS);
// 等待一段时间后关闭线程池
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
executor.shutdown();
}
}
```
上述示例代码创建了一个ScheduledExecutorService线程池,其中包含一个线程。通过schedule方法和scheduleAtFixedRate方法分别定义了两个定时任务,并在一段时间后关闭了线程池。
注意,在使用ScheduledExecutorService时,需要手动调用shutdown方法来关闭线程池,以释放资源。
阅读全文