java之认识定时器Timer
来源:互联网 发布:淘宝旺旺号怎么加好友 编辑:程序博客网 时间:2024/05/26 19:20
定义:基于给定的时间点、给点的时间间隔或者给定的执行次数自动执行的任务
Timer:多数的定时任务,由jdk直接提供。尽量使用timer
Quartz:搞定一切,源于开源项目,需要其他jar包支持。时间控制机制更加完善。
schedule(TimerTask task, Date time) :在特定时间执行任务,只执行一次
schedule(TimerTask task, long delay) :在特定时间之后执行任务,只执行一次
schedule(TimerTask task, Date firstTime,long period) :指定第一次执行的时间,然后按照间隔时间,重复执行
schedule(TimerTask task, long delay, long period):在特定延迟之后第一次执行,然后按照间隔时间,重复执行
scheduleAtFixedRate(TimerTask task, long delay, long period) :第一次执行之后,特定频率执行,与3同
scheduleAtFixedRate(TimerTask task,Date firstTime,long period) :在delay毫秒之后第一次执行,后按照特定频率执行
Timer的设计核心是一个TaskList和TaskThread。
Timer会将收到的任务丢到自己的TaskList中,TaskList按照最初执行时间进行排序。
TaskThread在创建Timer时会启动成为一个守护线程。这个线程会轮巡所有任务,找到一个最近要执行的任务,然后休眠,当达到最近要执行任务的开始时间点TaskThread被唤醒并执行该任务。之后TimerThread更新最近一个要执行的任务继续休眠。
Timer的优缺点:
优点:Timer的优点在于简单易用。
缺点:Timer的所有任务都是由同一线程调度
以下为一个timer的例子
import java.util.Timer;import java.util.TimerTask;public class TimerTask1 extends TimerTask{//创建timerTask2private int count = 0;//声明一个计数器private Timer timer ;public TimerTask1(Timer inputTimer){//构造方法 并初始化timer = inputTimer;}@Overridepublic void run() {if(count < 3){//如果count<3,执行System.out.println("次数加1");count ++;}else{System.out.println("从task queue里移除所有标记为canceled的task===" + timer.purge());cancel();//取消timerTask1System.out.println("timerTask1 停止了");System.out.println("从task queue里移除所有标记为canceled的task====" + timer.purge());try {Thread.sleep(2000);//等待两秒钟} catch (InterruptedException e) {e.printStackTrace();}timer.cancel();//整个timer取消System.out.println("所有timer结束");}}}
public class TimerTask2 extends TimerTask{//创建timerTask2@Overridepublic void run() {System.out.println("TimerTask2 正在执行" + new Date());}}
import java.util.Calendar;import java.util.Date;import java.util.Timer;public class ExecuteTimer {public static void main(String[] args) {Timer timer = new Timer();Calendar calendar = Calendar.getInstance();System.out.println("当前时间===" + new Date());TimerTask1 timerTask1 = new TimerTask1(timer);//声明timerTask1 传入参数timerTimerTask2 timerTask2 = new TimerTask2();//声明timerTask2timer.schedule(timerTask1, calendar.getTime(), 2000);//每隔2s中执行一次timer.scheduleAtFixedRate(timerTask2, calendar.getTime(), 1000);}}
- java之认识定时器Timer
- java多线程之定时器Timer
- Java多线程值之定时器Timer
- Java基础巩固之Timer定时器
- Java定时器之Timer源码剖析
- java定时器之Timer问题汇总
- QML之Timer定时器
- java定时器 Timer
- java中的定时器Timer
- java中timer定时器
- java定时器1:Timer
- JAVA Timer 定时器原理
- Java线程-Timer定时器
- java Timer 定时器
- java的定时器(Timer)
- java中的定时器Timer
- Timer 定时器类 java
- Java定时器Timer()
- 用rename已经改了类名,运行时不出错,但是出现未改之前的类名
- C语言基础练习11
- 思维导图_Linux中的软件安装命令
- C++细节问题1-类的相互调用
- 欢迎使用CSDN-markdown编辑器
- java之认识定时器Timer
- java之连接mysql数据库
- C语言操作MYSQL小例子
- BP神经网络误差反向传播公式简单推导
- bzoj5074 [Lydsy十月月赛]小B的数字
- [译]基于深度残差学习的图像识别
- Django 更改url.py后报错
- jsp的执行流程
- requestPermissions和checkSelfPermission源码解析