java timer 返回值_Java中,定时任务Timer简单示例
(1)Timer的方法schedule(task,time),参数task表示所要安排的任务,time表示执行任务的时间。作用:在时间等于或超过time的时候执行且仅执行一次task
(2)schedule(task,time,period)作用:时间等于或超过time时首次执行task,之后每隔period毫秒重复执行一次task
(3)schedule(task,delay)作用:等待delay毫秒后执行且仅执行一次task
(4)schedule(task,delay.period)的作用:等待delay毫秒后首次执行task,之后每隔period毫秒重复执行一次task
创建一个任务:
importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.TimerTask;//创建一个任务
public class MyTimerTask extendsTimerTask{privateString name;private int count=0; //设置执行次数
public MyTimerTask(String inputName) { //带参数的构造函数
this.name=inputName;
}
@Overridepublic voidrun() {if(count<3){//输出当前时间
Calendar calendar=Calendar.getInstance();
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("execute time is:"+simpleDateFormat.format(calendar.getTime()));//输出当前的name 的值
System.out.println("execute name is:"+name);
count++;
}else{
System.out.println("execute cancel");
cancel();
}
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}
}
任务定时定频调用测试:
packagecom.imooc.timers.timer1;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Timer;public classMyTimerTaskTest {public static voidmain(String[] args) {
Timer timer=new Timer(); //创建一个实例
MyTimerTask myTimerTask=new MyTimerTask("no"); //创建一个MyTimerTask实例//通过timer定时定频率执行任务MyTimerTask//第一次执行任务在当前时间的2秒前//timer.schedule(myTimerTask, 2000L,1000L);
/*** 获取当前时间,并设置成距离当前时间三秒之后的时间
* 如当前时间是2017-11-10 23:59:57
* 则设置后的时间则为2017-11-11 00:00:00*/Calendar calendar=Calendar.getInstance();
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(simpleDateFormat.format(calendar.getTime()));//获取当前时间3秒之后的时间
calendar.add(Calendar.SECOND,3);//------ schedule的用法-------
/*** 1、在时间等于或者超过time的时候执行且执行一次task
* 如在2016-11-11 00:00:00执行一次task:打印任务的名字*/
//myTimerTask.setName("schedule1");//timer.schedule(myTimerTask, calendar.getTime());
/*** 2、时间等于或chaoguotime时首次执行task
* 之后每隔period毫秒重复执行一次task
* 如在2017-11-11 00:00:00第一次执行task:打印任务名字
* 之后每隔2秒执行一次task*/myTimerTask.setName("schedule2");
timer.schedule(myTimerTask, calendar.getTime(),2000L);
System.out.println("scheduled time is:"+simpleDateFormat.format(myTimerTask.scheduledExecutionTime()));//效果一致//timer.scheduleAtFixedRate(myTimerTask, calendar.getTime(), 2000L);
/*** 3、等待delay毫秒后执行且进执行一次task
* 如现在是2017-11-11 00:00:00
* 则在2017-11-11 00:00:01执行一次task:打印任务名字*/
//myTimerTask.setName("schedule3");//timer.schedule(myTimerTask, 1000);
/*** 4、时间等于或chaoguotime时首次执行task
* 之后每隔period毫秒重复执行一次task
* 如在2017-11-11 00:00:00第一次执行task:打印任务名字
* 之后每隔2秒执行一次task*/
//myTimerTask.setName("schedule4");//timer.schedule(myTimerTask, 3000L,2000L);
}
}
其他常用函数:
TimerTask的cancel()函数的作用:取消当前TimerTask里的任务
TimerTask的scheduleExecutionTime()作用:返回此任务最近实际执行的已安排执行的时间,返回值:最近发生此任务执行安排的时间,为long型
Timer的cancel()函数的作用:终止此计时器,丢弃所有当前已安排的任务
Timer的purge()函数的作用:从此计时器的任务队列中移除所有已取消的任务。返回值:从队列中移除的任务数。
importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.Timer;public classCancleTest {public static void main(String[] args) throwsInterruptedException {
Timer timer=new Timer(); //创建一个实例
MyTimerTask task1=new MyTimerTask("task1"); //创建一个MyTimerTask实例
MyTimerTask task2=new MyTimerTask("task2"); //创建一个MyTimerTa
Date date=newDate();
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("start time is:"+simpleDateFormat.format(date));
timer.schedule(task1,3000,2000);
timer.schedule(task2,1000,2000);
System.out.println("current cancled task num is:"+timer.purge());//休眠5秒
Thread.sleep(5000);
Date cancleTime=newDate();
System.out.println("cancle time is:"+simpleDateFormat.format(cancleTime));//取消所有任务//timer.cancel();//System.out.println("Task all canceled!!");//取消task2任务
task2.cancel();
System.out.println("current cancled task num is:"+timer.purge());
}
}
首次计划执行时间小于当前时间scheduleAtFixedRate
public static voidmain(String[] args) {//规定格式
final SimpleDateFormat ftp=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");//获取当前的具体时间
Calendar calendar=Calendar.getInstance();
System.out.println("current time is:"+ftp.format(calendar.getTime()));//设置成6秒前时间
calendar.add(Calendar.SECOND, -6);
Timer timer=newTimer();//第一次执行时间为6秒前,之后每隔2秒执行一次
timer.schedule(newTimerTask() {//timer.scheduleAtFixedRate(new TimerTask() {
@Overridepublic voidrun() {//打印当前的计划执行时间
System.out.println("schedule exec time is:"+ftp.format(scheduledExecutionTime()));
System.out.println("task is being executed!");
}
},calendar.getTime(),2000);
}
效果:
current time is:2017-08-20 16-37-14
schedule exec time is:2017-08-20 16-37-14
task is being executed!
schedule exec time is:2017-08-20 16-37-16
task is being executed!
schedule exec time is:2017-08-20 16-37-18
task is being executed!
..............................................
timer.scheduleAtFixedRate(newTimerTask() {
@Overridepublic voidrun() {//打印当前的计划执行时间
System.out.println("schedule exec time is:"+ftp.format(scheduledExecutionTime()));
System.out.println("task is being executed!");
}
},calendar.getTime(),2000);
效果:
current time is:2017-08-20 16-38-39
schedule exec time is:2017-08-20 16-38-33
task is being executed!
schedule exec time is:2017-08-20 16-38-35
task is being executed!
schedule exec time is:2017-08-20 16-38-37
task is being executed!
schedule exec time is:2017-08-20 16-38-39
task is being executed!
schedule exec time is:2017-08-20 16-38-41
task is being executed!
schedule exec time is:2017-08-20 16-38-43
task is being executed!
--------------------------------------------------------------
更多推荐



所有评论(0)