工具——手写实现定时器

本文探讨了两种实现定时器的思路,一种是单线程循环等待,另一种是延时后创建新线程执行任务。为了确保定时精度,选择了后者,并结合线程池优化资源利用。通过测试验证,即使在任务执行速度不同的情景下,定时器仍能保持精确的定时执行,并在任务过多时能有效控制资源使用。
摘要由CSDN通过智能技术生成

使用场景:

    需要定时或周期性地执行某些任务(如:服务器定时像检查中心发送心跳信息)。

    思路1:定时器在一个循环中,每wait一定时间就执行任务(执行对应的方法)。

	@Override
	public void run() {
		while (goon) {
			synchronized (lock) {
				try {
					lock.wait(delay);
					//TODO执行任务
				} catch (InterruptedException e) {
					goon = false;
				}
			}
		}
	}

优点:一个线程去定时执行任务,消耗资源少

缺点:若单个任务执行时间较长(代码较繁琐),会造成定时不准确。(假设单个任务执行时间大于延时甚至很多,定时就没有存在的意义了)。

  思路2:每次延时后,创建一个线程去执行任务。定时器延时不受任务执行时间的干扰。

@Override
	public void run() {
		while (goon) {
			synchronized (lock) {
				try {
					lock.wait(delay);
					new work().start();
				} catch (InterruptedException e) {
					goon = false;
				}
			}
		}
	}

优点:定时十分精确。

缺点:若延时时间太短,容易在短时间造成大量的线程创建与销毁,拖慢系统性能。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值