Java 范例 - 定时任务
前言
JDK 有两种定时任务的实现,一种是单线程循环判断,另一种则是线程池。
定时器
java.util 包下有 Timer
类可用来实现定时任务,下面是一个简单的例子:
Date date = new Date(new Date().getTime() + 2000L);
new Timer().schedule(new TimerTask() {
@Override
public void run() {
System.out.println("tigger");
}
}, date);
不过该类有个缺陷就是无法并发执行任务,原因是该类是串行地取出任务执行。
定时执行器
为了解决并发执行任务问题,可以使用 ScheduledExecutorService
接口的实现类。
定时执行器本质上是一个线程池,同样的其也是通过 Executors 的工厂方法来进行创建。
ScheduledExecutorService executor = Executors.newScheduledThreadPool(2);
定时执行器包含了下面三个方法,通过名字就可以知道方法的大致作用。
ScheduledFuture<?> schedule(Runnable, long, TimeUnit)
ScheduledFuture<?> scheduleAtFixedRate(Runnable, long, long, TimeUnit)
ScheduledFuture<?> scheduleWithFixedDelay(Runnable, long, long, TimeUnit)
这里不做详细的叙述,下面给个例子。
ScheduledExecutorService executor = Executors.newScheduledThreadPool(2);
executor.scheduleAtFixedRate(new Runnable {
@Override
public void run() {
System.out.println(
"delay 3 seconds, then you will this message per 2 seconds");
}
}, 3, 2, TimeUnit.SECONDS);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统