java之认识定时器Timer

定义:基于给定的时间点给点的时间间隔或者给定的执行次数自动执行的任务

 

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{//创建timerTask2
	private int count = 0;//声明一个计数器
	private Timer timer ;
	public TimerTask1(Timer inputTimer){//构造方法  并初始化
		timer = inputTimer;
	}
	@Override
	public void run() {
		if(count < 3){//如果count<3,执行
			System.out.println("次数加1");
			count ++;
		}else{
			System.out.println("从task queue里移除所有标记为canceled的task===" + timer.purge());
			cancel();//取消timerTask1
			System.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
	@Override
	public 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   传入参数timer
		TimerTask2 timerTask2 = new TimerTask2();//声明timerTask2
		
		timer.schedule(timerTask1, calendar.getTime(), 2000);//每隔2s中执行一次

		timer.scheduleAtFixedRate(timerTask2, calendar.getTime(), 1000);
		
	}

}




 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值