Timer和TimerTask 方法详解
2017-12-19 17:45
330 查看
第一种方法:schedule(TimerTask task, long delay) 设定指定任务task在指定延迟delay后执行
第二种方法:schedule(TimerTask task, long delay, long period) 设定指定任务task在指定延迟delay后进行固定频率peroid的执行
第三种方法:schedule(TimerTask task,Date time) 设定指定任务task在指定时间time执行
第四种方法:schedule(TimerTask task,Date firstTime,long period) 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行
第五种方法:scheduleAtFixedRate(TimerTask task, long delay, long period) 设定指定任务task在指定延迟delay后进行固定频率peroid的执行
第六种方法:scheduleAtFixedRate(TimerTask task,Date firstTime,long period) 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行
[java] view
plain copy
package test;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* @author Solin
*
*/
public class TimeTest {
public static void main(String[] args) {
timer1();
}
/**
* 第一种方法:设定指定任务task在指定延迟delay后执行
* schedule(TimerTask task, long delay)
*/
public static void timer1(){
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("设定指定任务task在指定延迟delay后执行");
}
}, 2000);
}
/**
* 第二种方法:设定指定任务task在指定延迟delay后进行固定频率peroid的执行
* schedule(TimerTask task, long delay, long period)
*/
public static void timer2(){
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(new Date()+" 设定指定任务task在指定延迟delay后进行固定频率peroid的执行");
}
}, 1000, 2000);
}
/**
* 第三种方法:设定指定任务task在指定时间time执行
* schedule(TimerTask task,Date time)
*/
public static void timer3(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 10); // 控制时
calendar.set(Calendar.MINUTE, 42); // 控制分
calendar.set(Calendar.SECOND,55); // 控制秒
Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的12:00:00
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("设定指定任务task在指定时间time执行");
}
}, time);
}
/**
* 第四种方法:安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行
* schedule(TimerTask task,Date firstTime,long period)
*/
public static void timer4(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 10); // 控制时
calendar.set(Calendar.MINUTE, 42); // 控制分
calendar.set(Calendar.SECOND,55); // 控制秒
Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的12:00:00
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(new Date()+" 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行");
}
}, time,2000);
}
/**
* 第五种方法:设定指定任务task在指定延迟delay后进行固定频率peroid的执行
* scheduleAtFixedRate(TimerTask task, long delay, long period)
*/
public static void timer5(){
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(new Date()+" 设定指定任务task在指定延迟delay后进行固定频率peroid的执行");
}
}, 1000, 2000);
}
/**
* 第六种方法:安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行
* scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
*/
public static void timer6(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 10); // 控制时
calendar.set(Calendar.MINUTE, 42); // 控制分
calendar.set(Calendar.SECOND,55); // 控制秒
Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的12:00:00
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(new Date()+" 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行");
}
}, time,2000);
}
}
schedule和scheduleAtFixedRate的区别在于,如果指定开始执行的时间在当前系统运行时间之前,scheduleAtFixedRate会把已经过去的时间也作为周期执行,而schedule不会把过去的时间算上。
比如:
[html] view
plain copy
public static void timer6(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 11); // 控制时
calendar.set(Calendar.MINUTE, 20); // 控制分
calendar.set(Calendar.SECOND,00); // 控制秒
Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的11:20:00
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(new Date()+" 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行");
}
}, time,60*1000);
}
间隔时间是1分钟,指定开始时间是今天的 11:20:00,如果我在11:24:30执行这个程序,那么会立刻打印5次
Wed Nov 02 11:24:30 CST 2016 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行 //11:20:00
Wed Nov 02 11:24:30 CST 2016 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行 //11:21:00
Wed Nov 02 11:24:30 CST 2016 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行 //11:22:00
Wed Nov 02 11:24:30 CST 2016 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行 //11:23:00
Wed Nov 02 11:24:30 CST 2016 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行 //11:24:00
并且注意,下一次执行是在11:25:00 而不是 11:25:30。就是说是从指定的开始时间开始计时,而不是从执行时间开始计时。
但是上面如果用schedule方法,间隔时间是1分钟,指定开始时间今天11:20:00,那么在11:24:30执行这个程序,则立即执行程序一次。并且下一次的执行时间是11:25:30,而不是从11:20:00开始算的周期(11:25:00)。
转载地址:http://blog.csdn.net/qq_32786873/article/details/53005976
第二种方法:schedule(TimerTask task, long delay, long period) 设定指定任务task在指定延迟delay后进行固定频率peroid的执行
第三种方法:schedule(TimerTask task,Date time) 设定指定任务task在指定时间time执行
第四种方法:schedule(TimerTask task,Date firstTime,long period) 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行
第五种方法:scheduleAtFixedRate(TimerTask task, long delay, long period) 设定指定任务task在指定延迟delay后进行固定频率peroid的执行
第六种方法:scheduleAtFixedRate(TimerTask task,Date firstTime,long period) 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行
[java] view
plain copy
package test;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* @author Solin
*
*/
public class TimeTest {
public static void main(String[] args) {
timer1();
}
/**
* 第一种方法:设定指定任务task在指定延迟delay后执行
* schedule(TimerTask task, long delay)
*/
public static void timer1(){
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("设定指定任务task在指定延迟delay后执行");
}
}, 2000);
}
/**
* 第二种方法:设定指定任务task在指定延迟delay后进行固定频率peroid的执行
* schedule(TimerTask task, long delay, long period)
*/
public static void timer2(){
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(new Date()+" 设定指定任务task在指定延迟delay后进行固定频率peroid的执行");
}
}, 1000, 2000);
}
/**
* 第三种方法:设定指定任务task在指定时间time执行
* schedule(TimerTask task,Date time)
*/
public static void timer3(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 10); // 控制时
calendar.set(Calendar.MINUTE, 42); // 控制分
calendar.set(Calendar.SECOND,55); // 控制秒
Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的12:00:00
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("设定指定任务task在指定时间time执行");
}
}, time);
}
/**
* 第四种方法:安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行
* schedule(TimerTask task,Date firstTime,long period)
*/
public static void timer4(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 10); // 控制时
calendar.set(Calendar.MINUTE, 42); // 控制分
calendar.set(Calendar.SECOND,55); // 控制秒
Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的12:00:00
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(new Date()+" 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行");
}
}, time,2000);
}
/**
* 第五种方法:设定指定任务task在指定延迟delay后进行固定频率peroid的执行
* scheduleAtFixedRate(TimerTask task, long delay, long period)
*/
public static void timer5(){
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(new Date()+" 设定指定任务task在指定延迟delay后进行固定频率peroid的执行");
}
}, 1000, 2000);
}
/**
* 第六种方法:安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行
* scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
*/
public static void timer6(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 10); // 控制时
calendar.set(Calendar.MINUTE, 42); // 控制分
calendar.set(Calendar.SECOND,55); // 控制秒
Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的12:00:00
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(new Date()+" 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行");
}
}, time,2000);
}
}
schedule和scheduleAtFixedRate的区别在于,如果指定开始执行的时间在当前系统运行时间之前,scheduleAtFixedRate会把已经过去的时间也作为周期执行,而schedule不会把过去的时间算上。
比如:
[html] view
plain copy
public static void timer6(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 11); // 控制时
calendar.set(Calendar.MINUTE, 20); // 控制分
calendar.set(Calendar.SECOND,00); // 控制秒
Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的11:20:00
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(new Date()+" 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行");
}
}, time,60*1000);
}
间隔时间是1分钟,指定开始时间是今天的 11:20:00,如果我在11:24:30执行这个程序,那么会立刻打印5次
Wed Nov 02 11:24:30 CST 2016 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行 //11:20:00
Wed Nov 02 11:24:30 CST 2016 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行 //11:21:00
Wed Nov 02 11:24:30 CST 2016 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行 //11:22:00
Wed Nov 02 11:24:30 CST 2016 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行 //11:23:00
Wed Nov 02 11:24:30 CST 2016 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行 //11:24:00
并且注意,下一次执行是在11:25:00 而不是 11:25:30。就是说是从指定的开始时间开始计时,而不是从执行时间开始计时。
但是上面如果用schedule方法,间隔时间是1分钟,指定开始时间今天11:20:00,那么在11:24:30执行这个程序,则立即执行程序一次。并且下一次的执行时间是11:25:30,而不是从11:20:00开始算的周期(11:25:00)。
转载地址:http://blog.csdn.net/qq_32786873/article/details/53005976
相关文章推荐
- Java 定时器(Timer,TimerTask)详解及实例代码
- JDK中的Timer和TimerTask详解
- TimerTask类和Timer类的cancel()方法详解
- Android之Handler总结与Timer和TimerTask详解
- timer.schedule方法中参数详解
- 倒计时五种方法,方法一:Timer与TimerTask(Java实现)
- Timer和TimerTask详解
- PHP定时执行任务实现方法详解(Timer)
- 【Android】Android实现计时与倒计时的几种方法 Timer与TimerTask
- C#timer使用方法详解
- timer.schedule方法中参数详解
- PHP定时执行任务实现方法详解(Timer)
- C#timer使用方法详解
- Java定时器Timer使用方法详解
- JDK中的Timer和TimerTask详解
- Timer和TimerTask详解
- 任务调度的 Java 实现方法一:Timer、TimerTask、 ScheduledExecutorService
- java中timer的schedule和scheduleAtFixedRate方法区别详解
- Timer和TimerTask详解 -转载
- Timer和TimerTask详解——(转)