定时任务Elastic-job入门学习01

本文介绍通过多线程、Timer及ScheduledExecutorService实现定时任务的方法,适用于电商优惠券发放、银行还款提醒等多种业务场景。

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

定时任务Elastic-job入门学习01

1、概述:

1.1、任务调度;

  • 系统为了自动完成特定任务,在约定的特定时刻去执行任务
  • 节省人力
  • 下面业务场景的解决方案∶
    • 某电商系统需要在每天上午10点,下午3点,晚上8点发放一批优惠券。·某银行系统需要在信用卡到期还款日的前三天进行短信提醒。
    • 某财务系统需要在每天凌晨0:10结算前一天的财务数据,统计汇总。 12306会根据车次的不同,而设置某几个时间点进行分批放票。
    • 某网站为了实现天气实时展示,每隔5分钟就去天气服务器获取最新的实时天气信息。

1.2、基本实现:

1. 多线程:

   //任务执行间隔时间
        final long timeInterval = 1000;
        Runnable runnable = () -> {
            while (true){
                System.out.println(LocalDateTime.now()+"这是多线程实现任务调度,我将每隔1s执行一次");
                try {
                    Thread.sleep(timeInterval);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();

2. 时间timer(jdk):

        //一个timer就是一个线程
        Timer timer1 = new Timer();
        Timer timer2 = new Timer();
        timer1.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println(LocalDateTime.now()+"timer1方式实现任务调度!");

            }
        },1000,2000);//1秒后开始任务调度,每2秒执行一次
        timer2.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println(LocalDateTime.now()+"timer2方式实现任务调度!");

            }
        },1000,3000);//1秒后开始任务调度,每3秒执行一次

3. 任务调度线程池

  • ScheduledExecutorService为任务调度线程池,可以支持多个线程并行执行任务调度。参数为线程数,
  • 线程数为1效果和timer一样。
  • scheduleAtFixedRate():延迟一定时间后执行任务
    • 按指定频率周期执行某个任务
    • 初始化延迟0ms开始执行,每隔100ms重新执行一次任务。
    • Runnable command:执行线程
    • long initialDelay:初始化延时
    • long period:前一次执行结束到下一次执行开始的间隔时间(间隔执行延迟时间)
    • TimeUnit unit:时间单位
    • 以上一个任务开始的时间计时,period秒过去后,检测上一个任务是否执行完毕,如果上一个任务执行完毕,则当前任务立即执行,如果上一个任务没有执行完毕,则需要等上一个任务执行完毕后立即执行
    • scheduleWithFixedDelay(),是以上一个任务结束时开始计时,period秒过去后,立即执行。==指定频率间隔执行某个任务。==初始化时延时0ms开始执行,本次执行结束后延迟100ms开始下次执行
  ScheduledExecutorService pool = Executors.newScheduledThreadPool(10);
        System.err.println("start...");
        pool.scheduleAtFixedRate(()->{
            System.err.println("running...");
        },1,1,TimeUnit.SECONDS);
        Thread.sleep(10000);
        pool.shutdown();
        System.err.println("shutdown");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值