关于定时器Timer类的使用
关于定时器Timer类:
1、定时器的作用
间隔特定的时间,执行特定的程序。
2、在实际开发中,每隔一定的时间执行一段特定的程序,这种需求是很常见的, 那么在java中其实可以采用多种方式实现。
(1)可以使用Thread.sleep()方法,睡眠,设置好休眠的时间, 在特定的时间醒来,这种方式是最原始的定时器,比较低级。
(2)在java的类库中已经写好了一个定时器:java.util.Timer,可以直接拿来用。
不过,这种方式在目前的开发中也很少用,因为现在有很多高级框架都是支持定时任务的。
(3)目前使用较多的是Spring框架中提供的SpringTask框架。 这个框架只要进行简单的配置,就可以完成定时器的任务。
3、不管是什么框架的定时器,它的实现原理一般都是采用java.util.Timer实现的,所以有必要学习一下Timer这个类。
测试代码:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class Test12 { public static void main(String[] args) { // 创建定时器对象 Timer timer = new Timer(); //Timer timer1 = new Timer(); // 设置成守护线程的方式 // 指定定时任务 //timer.schedule(TimerTask task, Date firestTime, long period); // 三个参数:定时任务,第一次执行时间,间隔的毫秒数 // 先指定第一次执行时间,假设为:2020-7-25 10:17:20 // 获取时间对象 String str = "2020-7-25 10:17:20"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date firstTime = null; try { firstTime = sdf.parse(str); } catch (ParseException e) { e.printStackTrace(); } // 假设每5秒执行一次 long period = 5 * 1000L; /* 再来看第一个参数,第一个参数的类型为TimerTask,这是一个抽象类,不能实例化的。 这个TimerTask抽象类已经实现了Runnable接口,是一个线程运行类。 而这个TimerTask抽象类并没有子类,要求我们自己去写一个子类,继承TimerTask类,并重写抽象方法。 */ // 创建TimeTask对象 TimerTask task = new MyTask(); // 三个参数已经凑齐,开始执行定时任务 timer.schedule(task, firstTime, period); // 也可以采用匿名内部类,直接new抽象类 /* timer.schedule(new TimerTask() { @Override public void run() { // 任务代码块 } }, firstTime, 5000L); */ } } // 定义一个指定任务的类,继承TimerTask抽象类 class MyTask extends TimerTask { @Override public void run() { Date nowTime = new Date(); System.out.println(Thread.currentThread().getName() + ":" + nowTime); } }