java 定时任务的几种实现方式

本文介绍了四种常见的定时任务实现方法:使用Thread等待、timer调度、Executors调度及Spring的@Scheduled注解。详细对比了不同方法的特点及适用场景。

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

引言
在一个项目中往往需要定时或者在特定的时间执行一些任务,如删除服务器存储的一些数据缓存,定时发送推送等等。实现定时任务的方式有好几种,我总结了我知道的几种实现方式,具体实现方式如下:
实现一、使用Thread等待的方式
public static class TimerThread extends  Thread{
    @Override
    public void run() {
        super.run();
        while (true){
            doSomething();
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    private void doSomething() {
    }
}


实现二、timer的方式
static {
    Timer timer = new Timer();
    //一秒后执行,没五秒执行一次
    timer.schedule(new ImpTwoTimerTask(),1000,5000);
}
public static class ImpTwoTimerTask extends TimerTask {
    @Override
    public void run() {
        doSomething();
    }
}


实现三、Executors 的方式实现
public  static final ScheduledExecutorService _service = Executors.newSingleThreadScheduledExecutor();
static {
    //一秒后执行,每五秒执行一次
    _service.scheduleAtFixedRate(new ImpThreeExecutorRunnable(), 1000, 5000, TimeUnit.MICROSECONDS);
}
public static class  ImpThreeExecutorRunnable implements Runnable{
    @Override
    public void run() {
        doSomething();
    }
}


实现四、spring的@Scheduled 实现
1、xml配置
<task:anootation-driven>
2、接口和其实现类
注:该功能只能在接口的实现类上定义,在一般的类上定义无效果,在接口上定义也没有效果
@Scheduled(fixedRate=8000)
@Scheduled(fixedDelay=8000)
fixedRate 和fixdDelay的区别
fixedRate:如果该方法需要执行8秒,第一次开始执行和第二次开始执行间隔16秒
fixdDelay:如果该方法需要执行8秒,第一次开始执行和第二次开始执行间隔也是8秒
如果想更精确的执行定时任务可以使用
@Scheduled(cron)
corn由七个或者6个字符组成,中间使用空格作为分割符
分别为:second minute hour dayOfMonth MonthOfYear DayOfWeek Year
corn的具体写法大家可以自行百度
@Component
public class Task implements ITask {
//每八秒执行一次
    @Scheduled(fixedRate = 8000)
    @Override
    public void ScheduledTest() {
        doSomething();
    }
}


总结
以上的四种实现定时任务的方式一般情况下都可以使用,但是在要求精确小时分钟或者天,那就推荐使用Spring的实现方式,比如服务器需要在每天的凌晨两点做数据的清除。如果任务需要每半个小时必须执行一次(不管任务执行多久就算任务没有执行完也要执行下一次任务),推荐使用Executors(有scheduleWithFixedDelay 和scheduleAtFixedRate,概念跟Spring的fixedRate、fixdDelay 一致)和 Spring的实现方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值