Timer定时器的实用
1)Timer的原理:
(1)timer的触发和调用,都是基于多线程的. 有一个专门的线程触发我们的timer.
(2)我会准备一个队列,这个队列会排序,马上要执行的timer,会排在前面.
(3)在插入Timer的时候,我会记录触发的时间,然后我们这个线程会遍历这些timer,时间到了以后,执行timer的任务.
(4)取消timer,我们就终止线程,终止这些任务.
2)接口设置:
new Timer(): 创建一个定时器对象:
1.创建一个号自增长的id,作为timer的ID
2.创建一个TimerTask的队列
3.创建一个线程,等待TimerTask任务
schedule: 插入一个定时器,插入一个timer到队列
cancel: 取消定时器对象
timer管理线程: 定时器如何触发
3)wait: 释放锁,并且等待到wait上
4)peek: 取出,不移除
poll: 取出,且移除
5)如果头没有到时间,那么就休眠一段时间
————————————————
demo代码:
package com.example.demo; import java.util.*; public class TimerTest { public static void main(String [] args){ // timer1(); // timer2(); // timer3(); timer4(); } //在某个时间time执行任务 public static void timer1(){ //设定时间 Calendar calendar = new GregorianCalendar(); calendar.setTime(new Date()); calendar.add(calendar.MINUTE,1); Date time = calendar.getTime(); System.out.println("设定时间为:" + time); Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { System.out.println("执行了timer1定时任务!"); } }, time); } //在某个时间firstTime开始执行任务,并且每隔一段时间peroid执行一次 public static void timer2(){ //设定时间 Calendar calendar = new GregorianCalendar(); calendar.setTime(new Date()); calendar.add(calendar.MINUTE,1); Date firstTime = calendar.getTime(); System.out.println("设定时间为:" + firstTime); Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { System.out.println("执行了timer2定时任务!"); } }, firstTime,5000); } //在一定延迟时间delay后开始执行任务 public static void timer3(){ Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { System.out.println("执行了timer3定时任务!"); } }, 5000); } //在一定延迟时间delay后开始执行任务,并且每隔一段时间peroid执行一次 public static void timer4(){ Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { System.out.println("执行了timer4定时任务!"); } }, 5000,3000); } }