java timer是同步执行还是异步的_Java 中利用Timer定时器实现任务调度

本文介绍了Java Timer类作为简单的任务调度工具,它在后台启动一个单独线程执行任务,支持一次性或周期性调度。讨论了Timer的使用方式,包括固定速率和固定时延调度,以及如何避免任务执行时间过长导致的问题。同时,深入剖析了Timer的内部结构,如任务队列、线程安全和任务状态,并提醒了在垃圾回收时可能导致的异常情况。最后,提到了使用Timer可能遇到的异常,如内存溢出和线程创建失败,并推荐使用ScheduledExecutorService来替代。
摘要由CSDN通过智能技术生成

596b39dc182a08d066fa03112daa28ad.png

说到任务调度,大家可能会想到Quartz框架,但是jdk自带的简单任务调度工具类,反而了解的人并不是很多。我觉得如果你的业务相对简单的话,没必要非得用Quartz等框架,使用Timer完全可以胜任的。简单来分享一下我了解的Timer。

 Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。

一、Timer 使用

Timer 调度任务有一次性调度和循环调度,循环调度有分为固定速率调度(fixRate)和固定时延调度(fixDelay)。固定速率强调准点,固定时延强调间隔。

如果你有一个任务必须每天准点调度,那就应该使用固定速率调度,并且要确保每个任务执行时间不要太长,千万别超过了第二天这个点。如果你有一个任务需要每隔几分钟跑一次,那就使用固定时延调度,它不是很在乎你的单个任务要跑多长时间。

常用方法

		//0表示立即执行一次,以后每隔一段时间执行一次
		timer.schedule(task, 0, PERIOD);
		timer.schedule(task, bookTime(10,45,0), 10000)
		//1000表示1秒后执行一次,以后每隔一段时间执行一次
		timer.schedule(task, 1000, PERIOD);
		
		//0表示立即执行一次,以后每隔一段时间执行一次
		timer.schedule(task, 1000, PERIOD);
		
		// 在当天14点4分整,执行一次,以后不再执行
		timer.schedule(task, bookTime(15,0,0));		
		//在当天10点34分整,执行一次,以后每隔一段时间执行一次
		//如果时间超过了设定时间,会立即执行一次
		timer.schedule(task, bookTime(0,34,10),PERIOD);
		timer.scheduleAtFixedRate(task, bookTime(0,40,0),PERIOD);

代码示例

我是用TimerTask来创建一个任务,其中run方法里是任务调度的逻辑。使用一个Timer对象来调度任务。

TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务。

public class TaskManager {
    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值