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项目

java销毁定时器_JAVA中的定时器相关推荐

  1. java mod %区别_Java中 % 与Math.floorMod() 区别详解

    %为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...

  2. java show过时_Java中show() 方法被那个方法代替了? java编程 显示类中信

    你说的show是swing里的吧,在老版本中Component这个超类确实有show这个方法,而且这个方法也相当有用,使一个窗口可见,并放到最前面.在jdk5.0中阻止了这个方法,普遍用setVisi ...

  3. java判断类型_Java中类型判断的几种方式 - 码农小胖哥 - 博客园

    1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...

  4. java 序列化实例_Java中的序列化与反序列化实例

    创建的字节流与平台无关.因此,在一个平台上序列化的对象可以在另一个平台上反序列化. 为了使Java对象可序列化,我们实现java.io.Serializable可序列化接口. ObjectOutput ...

  5. java 数据类型分为_JAVA中分为基本数据类型及引用数据类型

    byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值 ...

  6. java 代码锁_Java中的Lock锁

    Lock锁介绍: 在java中可以使用 synchronized 来实现多线程下对象的同步访问,为了获得更加灵活使用场景.高效的性能,java还提供了Lock接口及其实现类ReentrantLock和 ...

  7. java wait 参数_java中wait()和join()方法的区别是什么

    java中wait()和join()方法的区别是:存在不同的java包中:wait()方法用于线程间通信,它所施加的等待状态的线程可以被启动:join()方法用于在多个线程之间添加排序,它所施加的等待 ...

  8. java thread join()_Java中Thread.join()的使用方法

    概要 本文分三个部分对thread.join()进行分析: 1. join() 的示例和作用 2. join() 源码分析 3. 对网上其他分析 join() 的文章提出疑问 1. join() 的示 ...

  9. java 锁定界面_Java中的锁

    java中的锁遵循不同的分类方法,太多了,乐观锁/悲观锁,可重入锁/不可重入锁,有些第一遇到的话,可能还有点懵.刚好周末有时间学习下,总结和梳理下. 一总述 总的来说对java的锁有以下七种分类方法: ...

最新文章

  1. 蓝桥杯-安慰奶牛(java)
  2. 遥控开关,4G远程控制增氧机,智慧农渔更轻松!
  3. linux设置切换窗口特效,Linux_在Ubuntu下启用亮丽的透明玻璃窗口特效,本文将采用图文并茂的形式向 - phpStudy...
  4. python与线性代数 矩阵
  5. 记录——《C Primer Plus (第五版)》第七章编程练习第九题
  6. pdf转swf linux,Linux环境安装配置Swftools,pdf转swf工具
  7. 虚拟环境中用Anaconda安装显卡CUDA驱动与CUDA运行版本匹配
  8. 调出cmd输入时的光标
  9. 未来十大最热门职业,可能消失的职业
  10. 做人的十三条黄金玉律
  11. 如何在Qt中使用zlib
  12. 关于定位一直在香港的解决方式
  13. 常见计算机主机内部硬件设备,计算机的硬件主要包括中央处理器、储存器、输出设备和...
  14. 使用3ds Max2022来制作简单的动漫头像
  15. 【电子器件笔记3】电容参数和选型
  16. Java NIO与IO比较总结
  17. 本地登录切断远程连接的简单方法
  18. 利用FFmpeg玩转Android视频录制与压缩
  19. Navicat For Mysql破解
  20. 【文献分享】将生态系统服务和景观连通性整合到生态安全格局优化中——以中国珠江三角洲为例

热门文章

  1. C语言 将一串数字,一个一个输出
  2. HC32L110(二) HC32L110 在 Ubuntu 下使用 J-Link 烧录
  3. 华为codecraft算法大赛---寻路
  4. 3.3 数据成员的存取
  5. python中类的命名规则_python命名规则
  6. 亡羊补牢,为时不晚?
  7. tutorabc怎么学英文?我来说说自己的真实感受!
  8. js自动执行函数书写方式
  9. 《中国机器人产业发展报告(2022年)》发布:预计2022年中国机器人市场规模174亿美元,五年年均增长22%(免费领取报告)
  10. Oracle:转换 转译