使用Timer即可,下述是示例代码
public static void main(String[] args) {
Timer timer = new Timer();
AtomicInteger time = new AtomicInteger(0);
log.info("开始执行=====================");
long tim = 2000;
timer.schedule(new TimerTask() {
@Override
public void run() {
log.error("停止执行");
timer.cancel();
}
}, 7000);
timer.schedule(new TimerTask() {
@Override
public void run() {
int i = time.incrementAndGet();
log.error("执行" + i + "次");
if (i == 5 ){
timer.cancel();
}
}
}, 1000, tim);
}
运行结果
17:04:54.155 [main] INFO testTimer.testM - 开始执行=====================
17:04:55.163 [Timer-0] ERROR testTimer.testM - 执行1次
17:04:57.160 [Timer-0] ERROR testTimer.testM - 执行2次
17:04:59.174 [Timer-0] ERROR testTimer.testM - 执行3次
17:05:01.159 [Timer-0] ERROR testTimer.testM - 停止执行
一:Timer线程不会捕获异常
,所以TimerTask抛出的未检查的异常会终止timer线程。
二:Timer线程时基于绝对时间
(如:2023/02/14 16:06:00),因此计划任务对系统的时间的改变是敏感的。
三:Timer是单线程
,如果某个任务很耗时,可能会影响其他计划任务的执行。