Java定时任务调度工具详解(2)— Timer 函数的综合应用

主要内容

通过模拟两个机器人的定时行为来把前面所学的主要函数给结合起来,让大家加深对这些函数的理解

实现两个机器人

第一个机器人会隔两秒打印最近一次计划的时间、执行内容
第二个机器人会模拟往桶里倒水,直到桶里的水满为止

灌水机器人的执行流程

Created with Raphaël 2.1.2 开始 灌水 水是否满? 停止工作 yes no

跳舞机器人的执行流程

Created with Raphaël 2.1.2 开始 跳舞 水是否满? 跳舞两秒 停止工作 yes no

代码演示

源码地址:https://gitee.com/liupeifeng3514/Timer-Quartz

创建跳舞机器人

import java.text.SimpleDateFormat;
import java.util.TimerTask;

public class DancingRobot extends TimerTask{
    /**
     * 任务执行
     * */
    @Override
    public void run() {

        // 获取最近的一次任务执行的时间并将其格式化
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.print("Schduled exec time is : " + sf.format(scheduledExecutionTime()));

        System.out.println("Dancing happily!");
    }
}

创建灌水机器人

import java.util.Timer;
import java.util.TimerTask;

/**
 * 灌水机器人
 */
public class WaterRobot extends TimerTask{

    private Timer timer;

    // 桶容量,最大容量为5
    private Integer bucketCapacity = 0;

    public WaterRobot(Timer timer){
        this.timer = timer;
    }

    @Override
    public void run() {
        // 灌水直至桶满为止
        if (this.bucketCapacity < 5) {
            System.out.println("Add 1L water into the bucket!");
            bucketCapacity++;
        }else{
            System.out.println("The number of canceled task in timer is : " + timer.purge());
            // 水满之后就停止执行
            cancel();
            System.out.println("The waterRobot has been aborted");
            System.out.println("The number of canceled task in timer is : " + timer.purge());
            System.out.println("Current water is : " + bucketCapacity);
            // 等待两秒钟,终止timer里面的所有内容
            try {
                Thread.sleep(2000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            timer.cancel();
        }
    }
}

创建执行类

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;

/**
 * 机器人执行类
 */
public class RobotExecutor {

    public static void main(String[] args){

        Timer timer = new Timer();

        // 获取当前时间
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("Current time is : " + sf.format(calendar.getTime()));

        DancingRobot dancingRobot = new DancingRobot();
        WaterRobot waterRobot = new WaterRobot(timer);

        timer.schedule(dancingRobot,calendar.getTime(),2000L);
        timer.scheduleAtFixedRate(waterRobot,calendar.getTime(),1000L);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值