现在有这么一个需求,例如我唱歌,买了一个时段的,到点要主动给停止掉,现在我用笨的办法,就是写一个定时任务,一分钟查询次,循环查询,看哪个时间到了,然后提醒,但是感觉这样写性能很不好,如果没有到时间的也得去循环查,有没有主动去提醒的,到时间就直接执行通知,不用一直循环去查,或者有什么别的好的方案,求分享!
现在有这么一个需求,例如我唱歌,买了一个时段的,到点要主动给停止掉,现在我用笨的办法,就是写一个定时任务,一分钟查询次,循环查询,看哪个时间到了,然后提醒,但是感觉这样写性能很不好,如果没有到时间的也得去循环查,有没有主动去提醒的,到时间就直接执行通知,不用一直循环去查,或者有什么别的好的方案,求分享!
用Timer吧,可以在某个时间执行的(可以传一个具体的时间)
public static void main(String[] args){
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());
calendar.add(Calendar.SECOND,3);//当前时间3秒后
Timer timer = new Timer();
//timer.schedule(任务,时间)
timer.schedule(new TimerTask() {
@Override
public void run() {
//业务代码
System.out.println(calendar.getTime());
timer.cancel();
}
},calendar.getTime());
}
把时间换成你想要的时间吧,如果你想要每天都执行,可以考虑把这些代码写在循环里,每次时间加一天?
我这里有个springMVC定时器的任务,不用循环,你可以设定具体时间,到你设定的时间就执行,给你看一下源码
//@Scheduled(cron = "0/20 * * * * ?")//每20秒跑一次
// @Scheduled(cron = "0 0 7 * * ?")//每天早上七点运行一次
@Scheduled(cron = "0 0 5,20,23 * * ?")//一天跑三次(防止阿里云服务器维护) 每天早上五点 下午八点 晚上十一点都跑一次
public void run() {
try {
System.out.println("运行了定时任务....");
} catch (Exception e) {
e.printStackTrace();
}
}
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
用延迟消息队列, 时段开始时往延迟队列写入一条消息, 到点时通知应用处理。