java中定时器输出的值_java中的定时器

1.自己写while(true)死循环,来判断是否到达执行时间条件

这种实现定时任务的方式,完全是自己写代码实现,放在第一个介绍,是因为它最灵活,完全由自己控制,但是缺点是,只适合小工具类的程序,任务单一固定的程序。

实现的简单代码块如下:

long  interval = 100;   // 秒

String runTime = "12:50";

Date startTime = new Date();

boolean runFlag = false;

int count = 0;

while(true){

Date nowTime = new Date();

if (!StringUtils.isEmpty(runTime)) {

String checkTime = DateUtilsExt.getNowTime("HH:mm");

if (runTime.equals(checkTime)) {

runFlag = true;

}

} else if (intervalTime > 0) {

long now = nowTime.getTime();

long start = startTime.getTime();

long interval = (now - start)/1000;

//第一次执行

if (count == 0) {

runFlag = true;

//间隔时间执行 运行间隔到了指定秒以后执行

} else if (intervalTime <= interval){

runFlag = true;

}

}

if (runFlag) {

// 执行定时任务

}

}

2.java自带的工具类 timer + timerTask

这个方式是我们本次导数工具所用的程序。用着挺方便,timer ,timerTask 都是java.util中提供的工具类,既可以用于java web项目,也可以用于javase项目。实,现代码如下

1.具体任务类

public class DateImportTask extends TimerTask {

private static Logger log = Logger.getLogger(DateImportTask.class);

private static boolean isRunning = false;

private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

public void run() {

if (!isRunning) {

isRunning = true;

log.info("开始执行任务..."); //开始任务

//working add what you want to do

log.info("执行任务完成..."); //任务完成

isRunning = false;

} else {

log.info("上一次任务执行还未结束..."); //上一次任务执行还未结束

}

}

}

2.任务控制类

public class TaskManager implements ServletContextListener {

private final Logger logger = Logger.getLogger(TaskManager.class);

/**

* 无延迟

*/

public static final long NO_DELAY = 0;

/**

* 定时器

*/

private Timer timer;

/**

* 在Web应用启动时初始化任务

*/

public void contextInitialized(ServletContextEvent event) {

//定义定时器

timer = new Timer("数据导入任务",true);

logger.info("定时器初始化。。。");

//启动备份任务,每 执行一次

// timer.schedule(new DateImportTask(),NO_DELAY, DateUtils.MILLIS_PER_SECOND * 1);

// 设置指定时间点启动任务

String startHour = event.getServletContext().getInitParameter("startHour");

String startMinute = event.getServletContext().getInitParameter("startMinute");

int hour = 14;

if (StringUtils.isNotBlank(startHour)){

hour = Integer.parseInt(startHour);

}

int minute = 14;

if (StringUtils.isNotBlank(startMinute)){

minute = Integer.parseInt(startMinute);

}

Calendar c = Calendar.getInstance();

c.set(Calendar.HOUR_OF_DAY,hour);

c.set(Calendar.MINUTE,minute);

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

logger.info("设置的启动时间为:"+sdf.format(c.getTime()));

timer.schedule(new DateImportTask(), c.getTime() , DateUtils.MILLIS_PER_DAY * 1);

}

/**

* 在Web应用结束时停止任务

*/

public void contextDestroyed(ServletContextEvent event) {

logger.info("定时器销毁。。。");

timer.cancel(); // 定时器销毁

}

}

3.quartz

Quartz是OpenSymphony开源组织的开源项目,既可以用于java web项目,也可以用于javase项目

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值