7.2 定时器
定时器的作用:
间隔特定的时间,执行特定的程序。
每周要进行银行账户的总账操作。
每天要进行数据的备份操作。
在实际的开发汇总,没隔多久执行一段特定的程序,这种需求是很常见的,那么在java中其实可以采用多种睡眠方式实现:
可以使用sleep方法,睡眠,设置睡眠时间,每到这个时间醒来,执行任务,这种方式是最原始的定时器。(比较low)
在java的类库中已经写好了一个定时器:java.util.Timer,可以直接拿来用。
不过,这种方式在目前的开发中很少用,因为现在有很多高的框架都是支持定时任务的。
在实际的开发中,目前使用较多的是Spring框架中提供的SpringTask框架,这个框架只要进行简单地配置,
就可以完成定时器的任务。
案例:
package com.javaSe.Thread; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; import java.util.TimerTask; /* 使用定时器指定定时任务。 */ public class TimerTest { public static void main(String[] args) { // 创建定时器对象 Timer timer = new Timer(); // Timer timer = new Timer(true);// 守护线程的方式 // 指定定时任务 // timer.schedule(定时任务,第一次执行时间,间隔多久执行一次); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date firstTime = null; try { firstTime = sdf.parse("2020-08-27 14:48:00"); } catch (ParseException e) { e.printStackTrace(); } // 自己编写的类 // timer.schedule(new LogTimerTask(),firstTime,1000 * 10); // 使用匿名内部类方式 timer.schedule(new TimerTask() { @Override public void run() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strTime = sdf.format(new Date()); System.out.println(strTime + ":完成了一次数据备份" ); } }, firstTime, 1000 * 10); } } // 编写一个定时任务类 // 假设这是一个记录日志的定时任务 class LogTimerTask extends TimerTask{ @Override public void run() { // 编写你需要执行的任务就行了。 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strTime = sdf.format(new Date()); System.out.println(strTime + ":完成了一次数据备份" ); } }