java定时器(二)------Timer

使用过程:

1.通过继承 TimerTask 类 并实现 run() 方法来自定义要执行的任务

2.通过执行Timer.schedule() 执行任务

public class TimerTest1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SimpleDateFormat simpleDateFormat =new SimpleDateFormat("HH:mm:ss");
		TimerTask task = new TimerTask() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				System.out.println(simpleDateFormat.format(new Date()) );//打印当前时间
			}
		};
		// 通过执行Timer.schedule(TimerTask task,Date time) 在执行时间运行任务
		Timer timer = new Timer();
		timer.schedule(task, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2020-07-16 12:00:00"));  //2020-07-16 12:00:00执行
		timer.schedule(task, 3000);  //当前时间3秒后执行task任务
		timer.schedule(task, 5000,1000);  //当前时间3秒后执行task任务,并且间隔1秒执行一次
	}

}

Timer的构造方法如下:

  1. Timer() 创建一个新计时器。
  2. Timer(boolean isDaemon)创建一个新计时器,可以指定其相关的线程作为守护程序运行。
  3. Timer(String name)创建一个新计时器,其相关的线程具有指定的名称。
  4. Timer(String name, boolean isDaemon)创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行。

Schedule重载方法如下:

  1. void schedule(TimerTask task, Date time)安排在指定的时间执行指定的任务。
  2. void schedule(TimerTask task, Date firstTime, long period)安排指定的任务在指定的时间开始进行重复的固定延迟执行
  3. void schedule(TimerTask task, long delay)安排在指定延迟后执行指定的任务。
  4. void schedule(TimerTask task, long delay, long period)安排指定的任务从指定的延迟后开始进行重复的固定延迟执行
  5. void scheduleAtFixedRate(TimerTask task,Date time, long period)安排指定的任务从指定时间后开始进行重复的固定延迟执行。如果该任务因为某些原因(例如垃圾收集)而延迟执行,那么接下来的任务会尽可能的快速执行,以赶上特定的时间点 。
  6. void scheduleAtFixedRate(TimerTask task, long delay, long period)安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。如果该任务因为某些原因(例如垃圾收集)而延迟执行,那么接下来的任务会尽可能的快速执行,以赶上特定的时间点 。

注意:
    TimerTask 是以队列的方式一个一个被顺序运行的,对任务的调度是基于绝对时间的,所有的TimerTask只有一个线程TimerThread来执行,因此同一时刻只有一个TimerTask在执行,任何一个TimerTask的执行异常都会导致Timer终止所有任务。
    所以执行的时间和你预期的时间可能不一致,因为前面的任务可能消耗的时间较长,则后面的任务运行的时间会被延迟。
    因此如果需要同时执行多个任务,可以借助ScheduledExecutorService的方式。可参考 定时器(三)------ScheduledExecutorService

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值