使用Java实现一个定时器

本文介绍如何使用Java的Timer类实现定时任务,包括创建计时器、设置任务执行时间和间隔等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在实现定时器之前,先了解一下实现过程中需要用到的知识。

java.util.Timer类:

它是一种工具,线程用其安排以后在后台线程中执行的任务,可安排任务执行一次,或者定期重复执行;

其构造方法:

Timer()  创建一个新计时器

Timer(boolean isDaemon)  创建的该计时器可以指定相关的线程作为守护线程运行。

我们需要用到的方法:

void schedule(TimerTask task,Date firstTime,long period)

(看参数大概也可以知道功能)安排指定任务在指定时间开始进行重复执行

//创建一个计时器
Timer timer = new Timer();
//然后调用schedule(TimerTask task,Date firstTime,long period)方法就行了,对里面参数进行导入

聊聊schedule里第一个参数类型TimerTask

TimerTask是一个抽象类,它实现了Runnable接口(所以也可以把它看成一个线程),我们需要对里面的run方法进行实现,也就实现计时器任务执行的操作。

聊聊schedule里第二个参数firstTime

看英文翻译过来的意思我们也可以猜到,它是要我们设置首次运行任务的时间,这个时间类型是Date型的,怎么设置呢?

总不能去计算毫秒然后设置吧。这里需要用到SimpleDateFormat类,设置日期格式创建一个SimpleDateFormat的对象,然后用其调用SimpleDateFormat类中的parse方法,该方法返回一个Date对象。这样就可以按自己的想法去设置firstTime参数了

(第三个参数period就是每次间隔执行任务的时间,long类型,单位是毫秒)

下面是实现代码:

package ly.practice.thread.threadSafety;
import java.util.Timer;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util. *;
/*
 * 使用定时器指定指定任务
 */
public class TimerText {
	public static void main(String[] args) throws ParseException {
		
		//创建定时对象
		Timer timer = new Timer();
		//Timer timer = new Timer(true)//守护线程的方式
		
		
		//指定定时任务
		//timer.schedule(定时任务,第一次执行时间,间隔多久执行一次)
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date firstTime = sdf.parse("2022-10-3 14:52:40");
		//timer.schedule(new LogTimerTask(),fitstTime,1000*60*24*365)一年执行一次
		timer.schedule(new LogTimerTask(), firstTime,1000*10);
	}
}

//编写一个定时任务类
//假设这是一个记录日志的定时任务
class LogTimerTask extends TimerTask{
	public void run() {
		//编写所需要的任务
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String strTime = sdf.format(new Date());
		System.out.println(strTime);
	}
}

首次执行的时间firstTime可以自己设置,编写任务操作也可以按自己的思维去完成.

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

假正经的小柴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值