Java 定时器的使用示例
最近要用到定时任务,就是超过48小时的数据给关闭,前台就不显示了。还是头一次使用java的定时器,。。java定时器使用Timer类。有时间得看下源码了,看看具体咋弄的。
Timer主要用于Java线程里指定时间或周期运行任务。Timer是线程安全的,但不提供实时性(real-time)保证。先看看调用timer的几种方式。
/**
*这个方法是调度一个task,经过2000(ms)后开始进行调度,仅仅调度一次。
*/
publicstaticvoidtimer1(){
TimernTimer=newTimer();
nTimer.schedule(newTimerTask(){
@Override
publicvoidrun(){
System.out.println("----设定要指定任务-----");
}
},2000);
}
/**
*在指定的时间点time上调度一次。
*/
publicstaticvoidtimer2(){
Timertimer=newTimer();
timer.schedule(newTimerTask(){
publicvoidrun(){
System.out.println("-------延迟5000毫秒,每1000毫秒执行一次--------");
}
},time);
}
/**
*延迟5000毫秒,每1000毫秒执行一次
*在5000(ms)后开始调度,每次调度完后,最少等待1000(ms)后才开始调度。
*/
publicstaticvoidtimer3(){
Timertimer=newTimer();
timer.scheduleAtFixedRate(newTimerTask(){
publicvoidrun(){
System.err.println("-------延迟5000毫秒,每1000毫秒执行一次--------");
}
},5000,1000);
}
/**
*设置17:56执行任务(第一次调度的时间),每过一天执行一次
*java.util.Timer.scheduleAtFixedRate(TimerTasktask,DatefirstTime,longperiod)
*/
publicstaticvoidtimer4(){
Calendarcalendar=Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY,17);
calendar.set(Calendar.MINUTE,26);
calendar.set(Calendar.SECOND,0);
Datetime=calendar.getTime();
Timertimer=newTimer();
timer.scheduleAtFixedRate(newTimerTask(){
publicvoidrun(){
System.out.println("-------设定要指定任务--------");
}
},time,1000*60*60*24);//这里设定将延时每天固定执行
}
以上就是调用的几种方法,再贴下我的代码
//时间间隔(一天)
longperiodDay=24*60*60*1000;
Calendarcalendar=Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY,1);//凌晨1点
calendar.set(Calendar.MINUTE,0);
calendar.set(Calendar.SECOND,0);
Datedate=calendar.getTime();//第一次执行定时任务的时间
//如果第一次执行定时任务的时间小于当前的时间
//此时要在第一次执行定时任务的时间加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
if(date.before(newDate())){
date=this.addDay(date,1);
}
newTimer().scheduleAtFixedRate(newTimerTask(){
publicvoidrun(){
Datenow=newDate();
//查出所有未关闭数据
Listlist=bankWorkService.findList(newBankWork().setStatus(Const.DEFAULT_STATUS));
//筛选出超过48小时的未关闭数据
list=list.stream().filter(e->{
try{
returnjudgmentDate(e.getModifiedTime(),now);
}catch(Exceptione1){
e1.printStackTrace();
}
returnfalse;
}).collect(Collectors.toList());
list.forEach(e->e.setStatus(Const.BANK_WORK_STATUS_OK).setModifiedTime(now));
//修改所有未关闭数据为关闭
bankWorkService.updateAsGroup(list);
}
},date,periodDay);
//判断时间是否超过48小时
privatestaticbooleanjudgmentDate(Datedate1,Datedate2)throwsException{
longcha=date2.getTime()-date1.getTime();
if(cha<0){
returnfalse;
}
doubleresult=cha*1.0/(1000*60*60);
if(result<=48){
returntrue;
}else{
returnfalse;
}
}
//增加或减少天数
privateDateaddDay(Datedate,intnum){
CalendarstartDT=Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH,num);
returnstartDT.getTime();
}
以上就是Java定时器的使用示例的详细内容,更多关于Java定时器的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。