Timer是Java内置的一个定时任务,类似于JavaScript里面的setTimeout()和setInterval()方法,可以延迟一定的时间执行任务,也可以按时间间隔重复执行任务。
Timer实际上就是启动了一个线程进行任务处理的,是异步的。
import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class Test { public static int times = 1; /** * Timer基本用法 * */ public static void main(String[] args) { Timer t = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { System.err.println(new Date() + " ==> " + Thread.currentThread().getName() + "第" + Test.times + "次执行"); Test.times++; if(Test.times >= 5) { System.err.println("定时器结束"); cancel(); } } }; t.schedule(task , 1000, 2000); /** * scheduleAtFixedRate和schedule 的区别 * schedule 是按任务真实执行时间来计算下次执行时间的。 * scheduleAtFixedRate 是按上个任务的计划执行时间来计算下次执行时间的。 * 举个例子: * 任务的执行间隔是2s,首次执行延迟时长为1s,当前时间是15:00:00 * schedule: * 第一次执行时间为15:00:01,下次执行时间为15:00:03 * 第二次执行时线程抢到CPU是在15:00:04,那第二次执行是在15:00:04,下次执行时间是(15:00:04 + 2s,也就是15:00:06) * scheduleAtFixedRate: * 第一次执行时间为15:00:01,下次执行时间为15:00:03 * 第二次执行时线程抢到CPU是在15:00:04,那第二次执行是在15:00:04,下次执行时间是(15:00:03 + 2s,也就是15:00:05) * */ } }
Timer的相关方法
下面是一些源码级别的介绍,不喜欢的可以跳过