定时线程池中多个定时任务创建java写法
时间: 2024-10-17 10:06:29 浏览: 9
在Java中,我们可以使用`ScheduledExecutorService`来创建定时线程池并处理多个定时任务。以下是创建定时线程池并添加定时任务的基本步骤:
```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledThreadPoolExample {
private static final int POOL_SIZE = 5; // 线程池大小
public static void main(String[] args) {
// 创建ScheduledExecutorService实例,通常使用固定大小的线程池
ScheduledExecutorService executor = Executors.newScheduledThreadPool(POOL_SIZE);
// 添加第一个定时任务
Runnable task1 = () -> System.out.println("Task 1 running at " + new Date());
long initialDelay = 5000; // 第一次执行延迟5秒
long period = 10000; // 每隔10秒执行一次
executor.scheduleAtFixedRate(task1, initialDelay, period, TimeUnit.MILLISECONDS);
// 添加第二个定时任务
Runnable task2 = () -> System.out.println("Task 2 running at " + new Date());
long delay2 = 3000; // 第二次执行延迟3秒
executor.schedule(task2, delay2, TimeUnit.SECONDS); // 不需要周期,仅执行一次
try {
// 关闭线程池,防止任务无限期运行
executor.shutdown();
// 等待所有任务完成
if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
executor.shutdownNow(); // 如果超时,强制停止剩余任务
System.err.println("Pool did not terminate");
}
} catch (InterruptedException e) {
executor.shutdownNow(); // 如果被打断,也关闭线程池
Thread.currentThread().interrupt();
}
}
}
```
在这个例子中,我们首先创建了一个`ScheduledExecutorService`,然后分别设置了两个定时任务,一个是周期性的`scheduleAtFixedRate()`,另一个是一次性的`schedule()`。最后通过`shutdown()`和`awaitTermination()`来管理和关闭线程池。
阅读全文