schedule的四种用法:
1.schedule(task,time)
参数:
task----所安排的任务
time----执行任务的时间
作用:
在时间等于或超过time的时候执行且仅执行一次task(ps:这里的 超过 是指time设置为在当前时间之前时,会立即执行task)
测试:
public class MyTimerTask extends TimerTask{ private String name; public MyTimerTask(String inputName) { name = inputName; } @Override public void run() { //以yyyy-MM-dd HH:mm:ss的格式打印当前执行时间 //如2019-4-22 00:00:00 Calendar calendar = Calendar.getInstance(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //打印当前name的内容 System.out.println("Current exec name is:" + name + "--------------" + sf.format(calendar.getTime())); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
public class MyTimer { public static void main(String[] args) { //创建一个timer实例 Timer timer =new Timer(); //创建一个MyTimerTask实例 MyTimerTask myTimerTask = new MyTimerTask("No.1"); //通过timer定时定频率调用myTimerTask的业务逻辑 // 即第一次执行是在当前时间的两秒之后,之后每隔一秒钟执行一次。执行的是myTimerTask中的run方法。 //timer.schedule(myTimerTask, 2000L,1000L); /*获取当前时间,并设置成距离当前时间三秒之后的时间 * 如当前时间是2019-4-22 23:59:57 * 则设置后的时间则为2019-4-23 00:00:00 * */ Calendar calendar = Calendar.getInstance(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sf.format(calendar.getTime())); calendar.add(Calendar.SECOND, 3); //--------- schedule的用法 -------- /*1.schedule(task,time) * 在时间等于或超过time的时候执行且仅执行一次task * */ myTimerTask.setName("schedule1"); timer.schedule(myTimerTask, calendar.getTime()); } }
运行结果如下:
2.schedule(task,time,period)
参数:
task----所要安排的任务
time----首次执行任务的时间
period----执行一次task的时间间隔,单位是毫秒
作用:
时间等于或超过time时首次执行task
之后每隔period毫秒重复执行一次task
/*2.时间等于或超过time时首次执行task 之后每隔period毫秒重复执行一次task 之后每隔两秒执行一次task*/ myTimerTask.setName("schedule2"); timer.schedule(myTimerTask, calendar.getTime(),2000);
执行效果如下:
3.schedule(task,delay)
参数:
task----所要安排的任务
delay----执行任务前的延迟时间,单位是毫秒
作用:
等待delay毫秒后执行且仅执行一次task
演示:
/*3.等待delay毫秒后执行且仅执行一次task 如现在是2019-4-22 00:00:00 则在2019-4-22 00:00:01第一次执行task:打印任务的名字 */ myTimerTask.setName("schedule3"); timer.schedule(myTimerTask,1000);
执行效果如下:
4.schedule(task,delay,period)
参数:
task----所要安排的任务
delay----执行任务前的延迟时间,单位是毫秒
period----执行一次task的时间间隔,单位是毫秒
作用:
等待delay毫秒后首次执行task0
之后每隔period毫秒重复执行一次task
演示:
/*4.等待delay毫秒后首次执行task 之后每隔period毫秒重复执行一次task 如现在是2019-4-22 00:00:00 则在2019-4-22 00:00:03第一次执行task:打印任务的名字 之后每隔两秒执行一次task*/ myTimerTask.setName("schedule4"); timer.schedule(myTimerTask,3000,2000);
执行效果如下:
scheduleAtFixedRate的两种用法:
scheduleAtFixedRate(task,time,period)
参数:
task----所要安排的任务
time----首次执行任务的时间
period----执行一次task的时间间隔,单位是毫秒
作用:
时间等于或超过time时首次执行task
之后每隔period毫秒重复执行一次task
演示:
/*1.时间等于或超过time时首次执行task 之后每隔period毫秒重复执行一次task 之后每隔两秒执行一次task*/ myTimerTask.setName("scheduleAtFixedRate1"); timer.scheduleAtFixedRate(myTimerTask, calendar.getTime(),2000);
执行效果如下:
scheduleAtFixedRate(task,delay,period)
参数:
task----所要安排的任务
delay----执行任务前的延迟时间,单位是毫秒
period----执行一次task的时间间隔,单位是毫秒
作用:
等待delay毫秒后首次执行task
之后每隔period毫秒重复执行一次task
演示:
/* 2.等待delay毫秒后首次执行task 之后每隔period毫秒重复执行一次task 如现在是2019-4-22 00:00:00 则在2019-4-22 00:00:03第一次执行task:打印任务的名字 之后每隔两秒执行一次task*/ myTimerTask.setName("scheduleAtFixedRate2"); timer.scheduleAtFixedRate(myTimerTask, 3000, 2000);
执行效果如下: