Java定时任务调度工具详解之Timer篇(初级)Timer函数的综合应用

一.通过模拟两个机器人的定时行为来加深对Timer相关函数的理解。

实现两个机器人第一个机器人会隔两秒打印最近一次计划的时间,执行内容

第二个机器人会模拟往桶里倒水,知道桶里的水满为止

这里写图片描述

这里写图片描述

代码示例:

DancingRobot类

package com.vishuo.timer;

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

public class DancingRobot extends TimerTask{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        //获取最近的一次任务执行的时间,并将其格式化
        SimpleDateFormat sf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("Scheduled exec time is :"+sf.format(scheduledExecutionTime()));
        System.out.println("Dancing happily");
    }

}

WaterRobot类

package com.vishuo.timer;

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

public class WaterRobot extends TimerTask{

    private Timer timer;
    //最大容量为5
    private Integer buketCapacity = 0;
    public WaterRobot(Timer InputTimer){
        timer = InputTimer;
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        if(buketCapacity<5){
            //灌水直至桶满为止
            System.out.println("Add 1L water into the bucket!");
            buketCapacity++;
        }else{
            //水满之后就停止执行
            System.out.println("The number of canceled task ion timer is :"+timer.purge());
            cancel();
            System.out.println("The waterRobot has been aborted");
            System.out.println("The number of canceled task ion timer is :"+timer.purge());
            System.out.println("Current water is " + buketCapacity+"L");
            //等待两秒钟,终止timer里面的所有内容
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            timer.cancel();
        }

    }

}

Executor演示类

package com.vishuo.timer;

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

public class Executor {

    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 dr = new DancingRobot();
        WaterRobot wr = new WaterRobot(timer);

        timer.schedule(dr, calendar.getTime(),2000);
        timer.scheduleAtFixedRate(wr, calendar.getTime(), 1000);


    }

}

二.Timer的缺陷

管理并发任务的缺陷:
Timer有且仅有一个线程去执行定时任务,如果存在多个任务,且任务时间过长,会导致执行效果与预期不符。

当任务抛出异常时的缺陷:
如果TimerTask抛出RuntimeException,Timer会停止所有任务的运行

Timer的使用禁区
对时效性要求较高的多任务并发作业
对复杂的任务的调度

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值