以下是部分代码,设置一个每天0点-5点之间的发奖任务,每隔24小时再次执行,一般在java进程启动后到点之后都会执行这个任务,但是有时候不会执行这个任务。不知道为什么
private final static ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(10); static { scheduler.setKeepAliveTime(20, TimeUnit.MINUTES); scheduler.allowCoreThreadTimeOut(true); } public static void init() { long target = 5; Calendar now = Calendar.getInstance(); int hour = now.get(Calendar.HOUR_OF_DAY); long m = now.get(Calendar.HOUR_OF_DAY) * 60; long minute = now.get(Calendar.MINUTE) + m; long initialDelay = 0; if (target > minute) { initialDelay = target - minute; } else { initialDelay = 24 * 60 + target - minute; } if (hour >= 0 && hour < 5) { initialDelay = 0; } long period = 24 * 60; scheduler.scheduleAtFixedRate(new Runnable() { @Override public void run() { BService.prize(); } }, initialDelay, period, TimeUnit.MINUTES); }
建议楼主把这类定时任务放到数据库里面写会更好管理和高效。如果没有涉及到业务的,只是单纯的计时功能的话,建议写到系统里面。毕竟系统层面会比你容器层面的效率要高很多。
希望回答能满意!
建议用第三方库实现任务调度,定时任务。比如:
cron4j,这个比较简单强大。满足一般需求。如果要求不是特别高,建议可以考虑这个
quartz:这个非常强大。
try{
BService.prize();
}catch{
}
上面的三种方法有没有帮到你,如果没解决参考资料:http://edu.51cto.com/course/course_id-2052.html