1.Timer定时器
在Timer定时任务中,主要涉及两个类:
- TimerTask: 负责业务逻辑
- Timer: 定时执行
Timer定时器——Timer类
- 参数
TaskQueue: 这是一个最小堆,它存放该Timer的所有TimerTask
TimerThread: 执行TaskQueue中的任务,执行完从任务对列中删除 - 构造方法
public Timer(){} //默认构造方法
public Timer(boolean isDaemon){} //在构造器中指定是否是守护线程
public Timer(String name){} //带有名字的构造方法
public Timer(String name,boolean isDaemon){} //不仅带有名字,还指定是否是守护线程 - 定时任务方法
**schedule(TimerTask task,Date time)😗*安排在指定的时间执行指定的任务(只执行一次)
**schedule(TimerTask task,Date firstTime,long period)😗*安排指定的任务在指定的时间开始进行重复的固定延迟执行
**schedule(TimerTask task,long delay):**安排在指定延迟后执行指定的任务
**schedule(TimerTask task,long delay,long period)😗*安排指定的任务指定的延迟后开始进行重复的固定延迟执行
**scheduleAtFixedRate(TimerTask task,Date firstTime,long period)😗*安排指定的任务在指定的时间开始进行重复速率执行
**scheduleAtFixedRate(TimerTask task,long delay,long period)😗*安排指定的任务在指定的延迟后开始进行重复速率的执行
**Timer.cancal()😗*终止此计时器,丢弃所有当前已安排的任务
**Timer.purge()😗*从此计时器的任务队列中移除所有已取消的任务
在指定的时间做某事(只做一次)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
class MyClass extends TimerTask{
Timer timer = null;
public MyClass() {}
public MyClass(Timer timer) {
this.timer = timer;
}
@Override
public void run() {
System.out.println("Hello,I am superman!");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = new Date();
String str = sdf.format(d);
System.out.println("当前时间:"+str);
timer.cancel();
}
}
public class TimerOnlyOne {
public static void main(String[] args) throws ParseException{
// TODO Auto-generated method stub
Timer mTimer = new Timer();
String time = "2020-4-26 18:10:10";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(time);
mTimer.schedule(new MyClass(mTimer), date);
}
}
import java.util.Timer;
import java.util.TimerTask;
import java.text.ParseException;
class MyClass1 extends TimerTask{
Timer timer = null;
public MyClass1() {}
public MyClass1(Timer timer) {
this.timer = timer;
}
@Override
public void run() {
System.out.println("Hello, I am superman! 延迟时间到,只执行一次");
timer.cancel();
}
}
public class TimeDelayOnlyOne {
public static void main(String[] args) {
// TODO Auto-generated method stub
Timer mTimer = new Timer();
mTimer.schedule(new MyClass1(mTimer), 1000);
}
}
延时